In [ ]:
import pandas as pd
import numpy as np
import tensorflow as tf
import keras
import matplotlib.pyplot as plt
import seaborn as sns
from sklearn.model_selection import train_test_split
from keras.layers import GRU, Dense
from keras.models import Sequential
from tensorflow.keras.callbacks import EarlyStopping
from sklearn.metrics import classification_report
from sklearn.metrics import confusion_matrix
from PIL import Image
import os
In [ ]:
window_size=5
def create_windows(features, labels, window_size):
    windows = []
    num_samples = min(len(features), len(labels))  # Adjust to the minimum length of features and labels
    for i in range(num_samples - window_size + 1):
        windows.append(features[i:i+window_size])
    return windows, labels[:num_samples-window_size+1]
In [ ]:
import matplotlib.pyplot as plt
import numpy as np
from sklearn.metrics import accuracy_score, precision_score, recall_score, f1_score, roc_curve, roc_auc_score

def plot_metrics(history, y_true, y_pred_proba):
    # Plot accuracy
    plt.figure(figsize=(18, 5))

    # Plot accuracy
    plt.subplot(1, 4, 1)
    plt.plot(history.history['accuracy'], label='Train Accuracy')
    plt.plot(history.history['val_accuracy'], label='Validation Accuracy')
    plt.title('Accuracy')
    plt.xlabel('Epoch')
    plt.ylabel('Accuracy')
    plt.legend()

    # Plot loss per epoch
    plt.subplot(1, 4, 2)
    train_loss = history.history['loss']
    val_loss = history.history['val_loss']
    plt.plot(np.arange(1, len(train_loss) + 1), train_loss, label='Train Loss')
    plt.plot(np.arange(1, len(val_loss) + 1), val_loss, label='Validation Loss')
    plt.xlabel('Epoch')
    plt.ylabel('Loss')
    plt.title('Loss per Epoch')
    plt.legend()

    # Calculate and print metrics
    accuracy = accuracy_score(y_true, y_pred_proba.round())
    precision = precision_score(y_true, y_pred_proba.round())
    recall = recall_score(y_true, y_pred_proba.round())
    f1 = f1_score(y_true, y_pred_proba.round())
    print("Accuracy: ", accuracy)
    print("Precision: ", precision)
    print("Recall: ", recall)
    print("F1 score: ", f1)

    # Plot precision, recall, and F1 score
    plt.subplot(1, 4, 3)
    metrics_names = ['Precision', 'Recall', 'F1 Score']
    metrics = [precision, recall, f1]
    plt.bar(metrics_names, metrics)
    plt.title('Precision, Recall, and F1 Score')
    plt.ylabel('Score')

    # Plot ROC-AUC curve
    plt.subplot(1, 4, 4)
    fpr, tpr, thresholds = roc_curve(y_true, y_pred_proba)
    roc_auc = roc_auc_score(y_true, y_pred_proba)
    plt.plot(fpr, tpr, label=f'ROC-AUC = {roc_auc:.2f}')
    plt.plot([0, 1], [0, 1], 'k--')
    plt.xlim([0.0, 1.0])
    plt.ylim([0.0, 1.05])
    plt.xlabel('False Positive Rate')
    plt.ylabel('True Positive Rate')
    plt.title('ROC-AUC Curve')
    plt.legend(loc='lower right')

    plt.tight_layout()
    plt.show()

Showing Dataset¶

CelebDF¶

Normal¶

In [ ]:
dataset_dir = "../Data/Image_set2/Normal_images/train"

# Get the list of class directories in the dataset directory
class_dirs = [os.path.join(dataset_dir, class_dir) for class_dir in os.listdir(dataset_dir) if os.path.isdir(os.path.join(dataset_dir, class_dir))]

# Plot the first 60 images from each class
for class_dir in class_dirs:
    # Get the list of image files in the class directory
    image_files = [os.path.join(class_dir, image_file) for image_file in os.listdir(class_dir) if image_file.endswith('.jpg')]

    # Plot the first 60 images from the class
    plt.figure(figsize=(10, 6))
    plt.suptitle(os.path.basename(class_dir))
    for i in range(min(len(image_files), 60)):
        plt.subplot(6, 10, i + 1)
        image = Image.open(image_files[i])
        plt.imshow(image)
        plt.axis('off')
    plt.show()

ELA¶

In [ ]:
dataset_dir = "../Data/Image_set2/ELA_images/train"

# Get the list of class directories in the dataset directory
class_dirs = [os.path.join(dataset_dir, class_dir) for class_dir in os.listdir(dataset_dir) if os.path.isdir(os.path.join(dataset_dir, class_dir))]

# Plot the first 60 images from each class
for class_dir in class_dirs:
    # Get the list of image files in the class directory
    image_files = [os.path.join(class_dir, image_file) for image_file in os.listdir(class_dir) if image_file.endswith('.jpg')]

    # Plot the first 60 images from the class
    plt.figure(figsize=(10, 6))
    plt.suptitle(os.path.basename(class_dir))
    for i in range(min(len(image_files), 60)):
        plt.subplot(6, 10, i + 1)
        image = Image.open(image_files[i])
        plt.imshow(image)
        plt.axis('off')
    plt.show()

FaceForensics++¶

Normal¶

In [ ]:
dataset_dir = "../Data/sampled_Faces/Frames"

# Get the list of class directories in the dataset directory
class_dirs = [os.path.join(dataset_dir, class_dir) for class_dir in os.listdir(dataset_dir) if os.path.isdir(os.path.join(dataset_dir, class_dir))]

# Plot the first 60 images from each class
for class_dir in class_dirs:
    # Get the list of image files in the class directory
    image_files = [os.path.join(class_dir, image_file) for image_file in os.listdir(class_dir) if image_file.endswith('.jpg')]

    # Plot the first 60 images from the class
    plt.figure(figsize=(10, 6))
    plt.suptitle(os.path.basename(class_dir))
    for i in range(min(len(image_files), 60)):
        plt.subplot(6, 10, i + 1)
        image = Image.open(image_files[i])
        plt.imshow(image)
        plt.axis('off')
    plt.show()

ELA¶

In [ ]:
dataset_dir = "../Data/sampled_Faces/ELA_Frames"

# Get the list of class directories in the dataset directory
class_dirs = [os.path.join(dataset_dir, class_dir) for class_dir in os.listdir(dataset_dir) if os.path.isdir(os.path.join(dataset_dir, class_dir))]

# Plot the first 60 images from each class
for class_dir in class_dirs:
    # Get the list of image files in the class directory
    image_files = [os.path.join(class_dir, image_file) for image_file in os.listdir(class_dir) if image_file.endswith('.jpg')]

    # Plot the first 60 images from the class
    plt.figure(figsize=(10, 6))
    plt.suptitle(os.path.basename(class_dir))
    for i in range(min(len(image_files), 60)):
        plt.subplot(6, 10, i + 1)
        image = Image.open(image_files[i])
        plt.imshow(image)
        plt.axis('off')
    plt.show()

ViT + GRU¶

Celeb DF¶

In [ ]:
df1=pd.read_csv("../Data/files/files/Celeb-df_vit.csv")
df1.head()
Out[ ]:
Unnamed: 0 0 1 2 3 4 5 6 7 8 ... 439 440 441 442 443 444 445 446 447 Label
0 0 0.319587 0.740929 0.464584 0.725391 -0.012810 -1.149684 -0.038594 -0.327014 -0.154114 ... 0.371236 -0.107152 0.009291 0.768575 -0.685553 0.363147 -0.134060 0.298729 0.410601 0
1 1 0.161553 0.282407 0.303938 0.341088 -0.214515 -0.484006 -0.392677 -0.436100 -0.238849 ... 0.149390 -0.052575 -0.197187 0.180801 -0.777508 0.225731 0.133878 0.147619 0.236145 0
2 2 0.176226 0.332912 0.183711 0.239652 -0.339653 -0.626031 -0.346819 -0.286595 -0.079800 ... 0.212713 0.157118 -0.148664 0.091372 -0.650060 0.241216 0.132933 0.100103 -0.045666 0
3 3 0.117250 0.246266 0.040510 0.296838 -0.354080 -0.398558 -0.260375 -0.149370 -0.117103 ... 0.299755 0.162576 -0.082298 0.042257 -0.574919 0.355091 0.163088 -0.007151 -0.346583 0
4 4 0.187924 0.029395 0.205600 0.142896 -0.162614 -0.471617 -0.374545 -0.373469 -0.125815 ... 0.222033 0.211545 -0.209460 0.072756 -0.709315 0.301771 0.280353 0.137477 -0.074121 0

5 rows × 450 columns

In [ ]:
df1=df1.drop(columns=["Unnamed: 0"],axis=1)
In [ ]:
df1.head()
Out[ ]:
0 1 2 3 4 5 6 7 8 9 ... 439 440 441 442 443 444 445 446 447 Label
0 0.319587 0.740929 0.464584 0.725391 -0.012810 -1.149684 -0.038594 -0.327014 -0.154114 0.384575 ... 0.371236 -0.107152 0.009291 0.768575 -0.685553 0.363147 -0.134060 0.298729 0.410601 0
1 0.161553 0.282407 0.303938 0.341088 -0.214515 -0.484006 -0.392677 -0.436100 -0.238849 0.040627 ... 0.149390 -0.052575 -0.197187 0.180801 -0.777508 0.225731 0.133878 0.147619 0.236145 0
2 0.176226 0.332912 0.183711 0.239652 -0.339653 -0.626031 -0.346819 -0.286595 -0.079800 0.123180 ... 0.212713 0.157118 -0.148664 0.091372 -0.650060 0.241216 0.132933 0.100103 -0.045666 0
3 0.117250 0.246266 0.040510 0.296838 -0.354080 -0.398558 -0.260375 -0.149370 -0.117103 0.228677 ... 0.299755 0.162576 -0.082298 0.042257 -0.574919 0.355091 0.163088 -0.007151 -0.346583 0
4 0.187924 0.029395 0.205600 0.142896 -0.162614 -0.471617 -0.374545 -0.373469 -0.125815 0.051613 ... 0.222033 0.211545 -0.209460 0.072756 -0.709315 0.301771 0.280353 0.137477 -0.074121 0

5 rows × 449 columns

In [ ]:
df1.describe()
Out[ ]:
0 1 2 3 4 5 6 7 8 9 ... 439 440 441 442 443 444 445 446 447 Label
count 30230.000000 30230.000000 30230.000000 30230.000000 30230.000000 30230.000000 30230.000000 30230.000000 30230.000000 30230.000000 ... 30230.000000 30230.000000 30230.000000 30230.000000 30230.000000 30230.000000 30230.000000 30230.000000 30230.000000 30230.000000
mean 0.259316 0.457617 0.445848 0.127436 0.080184 -0.240346 -0.268976 -0.348638 0.068808 0.086026 ... 0.106439 0.064627 -0.286260 0.601747 -0.506296 0.262817 0.028609 -0.026920 0.084267 0.497883
std 0.264986 0.324822 0.247092 0.262888 0.245127 0.430113 0.204650 0.258728 0.209300 0.222315 ... 0.166055 0.340704 0.289539 0.292156 0.229136 0.198547 0.233718 0.225405 0.423091 0.500004
min -0.877252 -1.051733 -0.752733 -1.017211 -0.994259 -2.084225 -1.118278 -1.265651 -0.839471 -0.927544 ... -0.814973 -1.191237 -1.498489 -1.042106 -1.281658 -0.736061 -0.970482 -0.929724 -1.268619 0.000000
25% 0.079479 0.238966 0.295908 -0.044882 -0.080356 -0.548626 -0.399674 -0.528674 -0.066946 -0.066433 ... -0.004448 -0.157839 -0.482820 0.432542 -0.654280 0.137684 -0.125336 -0.176880 -0.214761 0.000000
50% 0.271632 0.474799 0.462970 0.119968 0.081465 -0.267080 -0.272411 -0.360597 0.060369 0.078148 ... 0.115495 0.063312 -0.296643 0.605724 -0.520673 0.272744 0.027090 -0.024731 0.044856 0.000000
75% 0.449859 0.684649 0.621247 0.296774 0.236858 0.039955 -0.140543 -0.179838 0.194579 0.227940 ... 0.218954 0.282649 -0.096090 0.785375 -0.377867 0.396353 0.193513 0.123633 0.363984 1.000000
max 1.171945 1.645007 1.165276 1.460021 1.019962 1.498935 0.735892 0.836205 1.245430 1.102608 ... 0.791295 1.647735 0.992804 1.865433 0.713694 0.975717 0.794580 0.877693 1.627519 1.000000

8 rows × 449 columns

In [ ]:
X = df1.drop('Label', axis=1).values
y = df1['Label'].values
In [ ]:
X = X[:5*(len(X)//5)]
y=y[:5*(len(y)//5)]
In [ ]:
# Assuming you have X and y (features and labels) already defined
X_windows, y_windows = create_windows(X, y, window_size)
X_windows=np.array(X_windows)
y_windows=np.array(y_windows)
In [ ]:
X_train, X_test, y_train, y_test = train_test_split(X_windows, y_windows, test_size=0.2, random_state=42)
In [ ]:
model = Sequential()

# Add a GRU layer
model.add(GRU(units=64, input_shape=(window_size, X_train.shape[2]))) 
model.add(Dense(units=128, activation='relu'))
model.add(Dense(units=64, activation='relu'))


model.add(Dense(units=1, activation='sigmoid'))
In [ ]:
model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])
In [ ]:
history = model.fit(X_train, y_train, epochs=50, batch_size=32, validation_split=0.2)
Epoch 1/50
605/605 [==============================] - 8s 6ms/step - loss: 0.4766 - accuracy: 0.7636 - val_loss: 0.3493 - val_accuracy: 0.8387
Epoch 2/50
605/605 [==============================] - 3s 5ms/step - loss: 0.2950 - accuracy: 0.8681 - val_loss: 0.2518 - val_accuracy: 0.8865
Epoch 3/50
605/605 [==============================] - 3s 5ms/step - loss: 0.2083 - accuracy: 0.9089 - val_loss: 0.2375 - val_accuracy: 0.9026
Epoch 4/50
605/605 [==============================] - 3s 5ms/step - loss: 0.1665 - accuracy: 0.9274 - val_loss: 0.1652 - val_accuracy: 0.9282
Epoch 5/50
605/605 [==============================] - 3s 6ms/step - loss: 0.1389 - accuracy: 0.9413 - val_loss: 0.1595 - val_accuracy: 0.9361
Epoch 6/50
605/605 [==============================] - 3s 6ms/step - loss: 0.1201 - accuracy: 0.9491 - val_loss: 0.1164 - val_accuracy: 0.9531
Epoch 7/50
605/605 [==============================] - 3s 5ms/step - loss: 0.0974 - accuracy: 0.9599 - val_loss: 0.0924 - val_accuracy: 0.9651
Epoch 8/50
605/605 [==============================] - 3s 5ms/step - loss: 0.0940 - accuracy: 0.9614 - val_loss: 0.0958 - val_accuracy: 0.9653
Epoch 9/50
605/605 [==============================] - 3s 5ms/step - loss: 0.0791 - accuracy: 0.9670 - val_loss: 0.0840 - val_accuracy: 0.9713
Epoch 10/50
605/605 [==============================] - 3s 5ms/step - loss: 0.0723 - accuracy: 0.9728 - val_loss: 0.0870 - val_accuracy: 0.9661
Epoch 11/50
605/605 [==============================] - 3s 5ms/step - loss: 0.0641 - accuracy: 0.9753 - val_loss: 0.1402 - val_accuracy: 0.9479
Epoch 12/50
605/605 [==============================] - 3s 5ms/step - loss: 0.0568 - accuracy: 0.9798 - val_loss: 0.0818 - val_accuracy: 0.9733
Epoch 13/50
605/605 [==============================] - 3s 5ms/step - loss: 0.0508 - accuracy: 0.9813 - val_loss: 0.1125 - val_accuracy: 0.9613
Epoch 14/50
605/605 [==============================] - 3s 5ms/step - loss: 0.0522 - accuracy: 0.9806 - val_loss: 0.0947 - val_accuracy: 0.9586
Epoch 15/50
605/605 [==============================] - 3s 5ms/step - loss: 0.0371 - accuracy: 0.9865 - val_loss: 0.1166 - val_accuracy: 0.9609
Epoch 16/50
605/605 [==============================] - 3s 5ms/step - loss: 0.0463 - accuracy: 0.9839 - val_loss: 0.0726 - val_accuracy: 0.9756
Epoch 17/50
605/605 [==============================] - 3s 5ms/step - loss: 0.0350 - accuracy: 0.9873 - val_loss: 0.1067 - val_accuracy: 0.9620
Epoch 18/50
605/605 [==============================] - 3s 5ms/step - loss: 0.0392 - accuracy: 0.9860 - val_loss: 0.0693 - val_accuracy: 0.9744
Epoch 19/50
605/605 [==============================] - 3s 5ms/step - loss: 0.0277 - accuracy: 0.9911 - val_loss: 0.0778 - val_accuracy: 0.9785
Epoch 20/50
605/605 [==============================] - 3s 5ms/step - loss: 0.0347 - accuracy: 0.9884 - val_loss: 0.0941 - val_accuracy: 0.9715
Epoch 21/50
605/605 [==============================] - 3s 4ms/step - loss: 0.0370 - accuracy: 0.9873 - val_loss: 0.0779 - val_accuracy: 0.9739
Epoch 22/50
605/605 [==============================] - 3s 5ms/step - loss: 0.0293 - accuracy: 0.9906 - val_loss: 0.0654 - val_accuracy: 0.9789
Epoch 23/50
605/605 [==============================] - 3s 5ms/step - loss: 0.0282 - accuracy: 0.9900 - val_loss: 0.0948 - val_accuracy: 0.9653
Epoch 24/50
605/605 [==============================] - 3s 5ms/step - loss: 0.0289 - accuracy: 0.9901 - val_loss: 0.0704 - val_accuracy: 0.9731
Epoch 25/50
605/605 [==============================] - 3s 5ms/step - loss: 0.0243 - accuracy: 0.9918 - val_loss: 0.0943 - val_accuracy: 0.9667
Epoch 26/50
605/605 [==============================] - 3s 5ms/step - loss: 0.0190 - accuracy: 0.9940 - val_loss: 0.0537 - val_accuracy: 0.9828
Epoch 27/50
605/605 [==============================] - 3s 5ms/step - loss: 0.0274 - accuracy: 0.9913 - val_loss: 0.0525 - val_accuracy: 0.9808
Epoch 28/50
605/605 [==============================] - 3s 5ms/step - loss: 0.0246 - accuracy: 0.9916 - val_loss: 0.0481 - val_accuracy: 0.9841
Epoch 29/50
605/605 [==============================] - 3s 5ms/step - loss: 0.0196 - accuracy: 0.9934 - val_loss: 0.0357 - val_accuracy: 0.9880
Epoch 30/50
605/605 [==============================] - 3s 5ms/step - loss: 0.0200 - accuracy: 0.9935 - val_loss: 0.0823 - val_accuracy: 0.9742
Epoch 31/50
605/605 [==============================] - 3s 5ms/step - loss: 0.0230 - accuracy: 0.9922 - val_loss: 0.0502 - val_accuracy: 0.9839
Epoch 32/50
605/605 [==============================] - 3s 5ms/step - loss: 0.0173 - accuracy: 0.9948 - val_loss: 0.0500 - val_accuracy: 0.9830
Epoch 33/50
605/605 [==============================] - 3s 5ms/step - loss: 0.0162 - accuracy: 0.9951 - val_loss: 0.0732 - val_accuracy: 0.9793
Epoch 34/50
605/605 [==============================] - 3s 5ms/step - loss: 0.0207 - accuracy: 0.9941 - val_loss: 0.0607 - val_accuracy: 0.9793
Epoch 35/50
605/605 [==============================] - 3s 5ms/step - loss: 0.0258 - accuracy: 0.9916 - val_loss: 0.0606 - val_accuracy: 0.9822
Epoch 36/50
605/605 [==============================] - 3s 5ms/step - loss: 0.0186 - accuracy: 0.9942 - val_loss: 0.0388 - val_accuracy: 0.9868
Epoch 37/50
605/605 [==============================] - 3s 5ms/step - loss: 0.0148 - accuracy: 0.9951 - val_loss: 0.1505 - val_accuracy: 0.9644
Epoch 38/50
605/605 [==============================] - 3s 5ms/step - loss: 0.0196 - accuracy: 0.9947 - val_loss: 0.0892 - val_accuracy: 0.9682
Epoch 39/50
605/605 [==============================] - 3s 5ms/step - loss: 0.0186 - accuracy: 0.9942 - val_loss: 0.1221 - val_accuracy: 0.9595
Epoch 40/50
605/605 [==============================] - 3s 5ms/step - loss: 0.0166 - accuracy: 0.9952 - val_loss: 0.0395 - val_accuracy: 0.9884
Epoch 41/50
605/605 [==============================] - 3s 4ms/step - loss: 0.0162 - accuracy: 0.9950 - val_loss: 0.0396 - val_accuracy: 0.9892
Epoch 42/50
605/605 [==============================] - 3s 4ms/step - loss: 0.0117 - accuracy: 0.9960 - val_loss: 0.0342 - val_accuracy: 0.9913
Epoch 43/50
605/605 [==============================] - 3s 4ms/step - loss: 0.0196 - accuracy: 0.9932 - val_loss: 0.0314 - val_accuracy: 0.9899
Epoch 44/50
605/605 [==============================] - 3s 4ms/step - loss: 0.0126 - accuracy: 0.9964 - val_loss: 0.0520 - val_accuracy: 0.9843
Epoch 45/50
605/605 [==============================] - 3s 4ms/step - loss: 0.0177 - accuracy: 0.9948 - val_loss: 0.0460 - val_accuracy: 0.9839
Epoch 46/50
605/605 [==============================] - 3s 4ms/step - loss: 0.0113 - accuracy: 0.9969 - val_loss: 0.0474 - val_accuracy: 0.9903
Epoch 47/50
605/605 [==============================] - 3s 4ms/step - loss: 0.0137 - accuracy: 0.9957 - val_loss: 0.0381 - val_accuracy: 0.9901
Epoch 48/50
605/605 [==============================] - 3s 4ms/step - loss: 0.0041 - accuracy: 0.9989 - val_loss: 0.0925 - val_accuracy: 0.9801
Epoch 49/50
605/605 [==============================] - 3s 4ms/step - loss: 0.0220 - accuracy: 0.9932 - val_loss: 0.0474 - val_accuracy: 0.9859
Epoch 50/50
605/605 [==============================] - 3s 4ms/step - loss: 0.0126 - accuracy: 0.9961 - val_loss: 0.0727 - val_accuracy: 0.9797
In [ ]:
y_pred= model.predict(X_test)
plot_metrics(history, y_test, y_pred)
189/189 [==============================] - 1s 2ms/step
Accuracy:  0.9768441945087661
Precision:  0.9571845604930262
Recall:  0.9972963839134843
F1 score:  0.976828864614366

FaceForensics++¶

In [ ]:
df=pd.read_csv("../Data/files/files/FaceForensics++_vit.csv")
df.head()
Out[ ]:
Unnamed: 0 0 1 2 3 4 5 6 7 8 ... 439 440 441 442 443 444 445 446 447 Label
0 0 0.152438 -0.121375 0.114292 0.435109 -0.507435 -0.624092 0.190492 0.046037 -0.210777 ... 0.166606 -0.503968 -0.216118 0.285240 -0.128606 0.091050 0.150067 0.317554 0.134370 0
1 1 0.163847 -0.192323 0.040283 0.299069 -0.458294 -1.033910 0.174511 0.050176 -0.237243 ... 0.113710 -0.557863 -0.370582 0.408184 -0.203390 0.074348 0.040887 0.314162 0.173738 0
2 2 0.254703 -0.477296 0.059869 0.288169 -0.227808 -0.729224 0.312402 -0.080102 -0.125552 ... 0.086803 -0.506135 -0.453529 0.355232 -0.160394 0.125007 0.288522 0.423472 0.274884 0
3 3 0.390347 0.514306 -0.427429 -0.228258 -0.192464 -0.046658 0.326668 -0.359907 0.035693 ... 0.163242 -0.003001 -0.384819 0.586222 -0.071899 -0.323445 0.295907 -0.225351 0.517398 0
4 4 0.359816 0.448768 0.312162 -0.087348 -0.119048 -0.109513 -0.062974 -0.484983 0.218991 ... 0.137529 -0.571143 0.088718 0.923603 -0.208798 -0.208724 -0.192980 -0.314196 -0.186290 0

5 rows × 450 columns

In [ ]:
df=df.drop(columns=["Unnamed: 0"],axis=1)
In [ ]:
df.head()
Out[ ]:
0 1 2 3 4 5 6 7 8 9 ... 439 440 441 442 443 444 445 446 447 Label
0 0.152438 -0.121375 0.114292 0.435109 -0.507435 -0.624092 0.190492 0.046037 -0.210777 -0.026552 ... 0.166606 -0.503968 -0.216118 0.285240 -0.128606 0.091050 0.150067 0.317554 0.134370 0
1 0.163847 -0.192323 0.040283 0.299069 -0.458294 -1.033910 0.174511 0.050176 -0.237243 0.277858 ... 0.113710 -0.557863 -0.370582 0.408184 -0.203390 0.074348 0.040887 0.314162 0.173738 0
2 0.254703 -0.477296 0.059869 0.288169 -0.227808 -0.729224 0.312402 -0.080102 -0.125552 0.184719 ... 0.086803 -0.506135 -0.453529 0.355232 -0.160394 0.125007 0.288522 0.423472 0.274884 0
3 0.390347 0.514306 -0.427429 -0.228258 -0.192464 -0.046658 0.326668 -0.359907 0.035693 -0.206162 ... 0.163242 -0.003001 -0.384819 0.586222 -0.071899 -0.323445 0.295907 -0.225351 0.517398 0
4 0.359816 0.448768 0.312162 -0.087348 -0.119048 -0.109513 -0.062974 -0.484983 0.218991 -0.187376 ... 0.137529 -0.571143 0.088718 0.923603 -0.208798 -0.208724 -0.192980 -0.314196 -0.186290 0

5 rows × 449 columns

In [ ]:
X = df.drop('Label', axis=1).values
y = df['Label'].values
In [ ]:
X = X[:5*(len(X)//5)]
y=y[:5*(len(y)//5)]
In [ ]:
X_windows, y_windows = create_windows(X, y, window_size)
X_windows=np.array(X_windows)
y_windows=np.array(y_windows)
In [ ]:
X_train, X_test, y_train, y_test = train_test_split(X_windows, y_windows, test_size=0.2, random_state=42)
In [ ]:
model = Sequential()

# Add a GRU layer
model.add(GRU(units=64, input_shape=(window_size, X_train.shape[2]))) 
model.add(Dense(units=128, activation='relu'))
model.add(Dense(units=64, activation='relu'))


model.add(Dense(units=1, activation='sigmoid'))
In [ ]:
model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])
In [ ]:
history = model.fit(X_train, y_train, epochs=50, batch_size=32, validation_split=0.2)
Epoch 1/50
677/677 [==============================] - 5s 5ms/step - loss: 0.3776 - accuracy: 0.8197 - val_loss: 0.2229 - val_accuracy: 0.9046
Epoch 2/50
677/677 [==============================] - 3s 5ms/step - loss: 0.1477 - accuracy: 0.9432 - val_loss: 0.1114 - val_accuracy: 0.9566
Epoch 3/50
677/677 [==============================] - 3s 4ms/step - loss: 0.1012 - accuracy: 0.9615 - val_loss: 0.1674 - val_accuracy: 0.9381
Epoch 4/50
677/677 [==============================] - 3s 4ms/step - loss: 0.0725 - accuracy: 0.9721 - val_loss: 0.0891 - val_accuracy: 0.9682
Epoch 5/50
677/677 [==============================] - 3s 4ms/step - loss: 0.0619 - accuracy: 0.9744 - val_loss: 0.0923 - val_accuracy: 0.9688
Epoch 6/50
677/677 [==============================] - 3s 4ms/step - loss: 0.0516 - accuracy: 0.9804 - val_loss: 0.0637 - val_accuracy: 0.9784
Epoch 7/50
677/677 [==============================] - 3s 5ms/step - loss: 0.0462 - accuracy: 0.9829 - val_loss: 0.0608 - val_accuracy: 0.9765
Epoch 8/50
677/677 [==============================] - 3s 4ms/step - loss: 0.0390 - accuracy: 0.9865 - val_loss: 0.0547 - val_accuracy: 0.9806
Epoch 9/50
677/677 [==============================] - 3s 4ms/step - loss: 0.0386 - accuracy: 0.9855 - val_loss: 0.0646 - val_accuracy: 0.9745
Epoch 10/50
677/677 [==============================] - 3s 4ms/step - loss: 0.0342 - accuracy: 0.9868 - val_loss: 0.0504 - val_accuracy: 0.9824
Epoch 11/50
677/677 [==============================] - 3s 4ms/step - loss: 0.0325 - accuracy: 0.9886 - val_loss: 0.0352 - val_accuracy: 0.9858
Epoch 12/50
677/677 [==============================] - 3s 4ms/step - loss: 0.0262 - accuracy: 0.9901 - val_loss: 0.0508 - val_accuracy: 0.9821
Epoch 13/50
677/677 [==============================] - 3s 4ms/step - loss: 0.0273 - accuracy: 0.9895 - val_loss: 0.0512 - val_accuracy: 0.9800
Epoch 14/50
677/677 [==============================] - 3s 4ms/step - loss: 0.0216 - accuracy: 0.9923 - val_loss: 0.0533 - val_accuracy: 0.9837
Epoch 15/50
677/677 [==============================] - 3s 4ms/step - loss: 0.0235 - accuracy: 0.9919 - val_loss: 0.0354 - val_accuracy: 0.9882
Epoch 16/50
677/677 [==============================] - 3s 4ms/step - loss: 0.0186 - accuracy: 0.9933 - val_loss: 0.0803 - val_accuracy: 0.9756
Epoch 17/50
677/677 [==============================] - 3s 4ms/step - loss: 0.0205 - accuracy: 0.9930 - val_loss: 0.0389 - val_accuracy: 0.9876
Epoch 18/50
677/677 [==============================] - 3s 4ms/step - loss: 0.0157 - accuracy: 0.9943 - val_loss: 0.0304 - val_accuracy: 0.9898
Epoch 19/50
677/677 [==============================] - 3s 4ms/step - loss: 0.0155 - accuracy: 0.9942 - val_loss: 0.0592 - val_accuracy: 0.9830
Epoch 20/50
677/677 [==============================] - 3s 4ms/step - loss: 0.0207 - accuracy: 0.9927 - val_loss: 0.0258 - val_accuracy: 0.9909
Epoch 21/50
677/677 [==============================] - 3s 4ms/step - loss: 0.0156 - accuracy: 0.9951 - val_loss: 0.0313 - val_accuracy: 0.9897
Epoch 22/50
677/677 [==============================] - 3s 5ms/step - loss: 0.0178 - accuracy: 0.9942 - val_loss: 0.0290 - val_accuracy: 0.9902
Epoch 23/50
677/677 [==============================] - 3s 5ms/step - loss: 0.0156 - accuracy: 0.9949 - val_loss: 0.0251 - val_accuracy: 0.9911
Epoch 24/50
677/677 [==============================] - 3s 4ms/step - loss: 0.0098 - accuracy: 0.9971 - val_loss: 0.0311 - val_accuracy: 0.9898
Epoch 25/50
677/677 [==============================] - 3s 4ms/step - loss: 0.0173 - accuracy: 0.9940 - val_loss: 0.0500 - val_accuracy: 0.9837
Epoch 26/50
677/677 [==============================] - 3s 4ms/step - loss: 0.0116 - accuracy: 0.9967 - val_loss: 0.0535 - val_accuracy: 0.9819
Epoch 27/50
677/677 [==============================] - 3s 4ms/step - loss: 0.0138 - accuracy: 0.9952 - val_loss: 0.0423 - val_accuracy: 0.9895
Epoch 28/50
677/677 [==============================] - 3s 4ms/step - loss: 0.0138 - accuracy: 0.9957 - val_loss: 0.0299 - val_accuracy: 0.9908
Epoch 29/50
677/677 [==============================] - 3s 4ms/step - loss: 0.0105 - accuracy: 0.9967 - val_loss: 0.0459 - val_accuracy: 0.9843
Epoch 30/50
677/677 [==============================] - 3s 4ms/step - loss: 0.0112 - accuracy: 0.9961 - val_loss: 0.0348 - val_accuracy: 0.9852
Epoch 31/50
677/677 [==============================] - 3s 4ms/step - loss: 0.0088 - accuracy: 0.9973 - val_loss: 0.0443 - val_accuracy: 0.9885
Epoch 32/50
677/677 [==============================] - 3s 4ms/step - loss: 0.0141 - accuracy: 0.9956 - val_loss: 0.0354 - val_accuracy: 0.9861
Epoch 33/50
677/677 [==============================] - 3s 4ms/step - loss: 0.0093 - accuracy: 0.9970 - val_loss: 0.0627 - val_accuracy: 0.9806
Epoch 34/50
677/677 [==============================] - 3s 4ms/step - loss: 0.0083 - accuracy: 0.9974 - val_loss: 0.0260 - val_accuracy: 0.9922
Epoch 35/50
677/677 [==============================] - 3s 4ms/step - loss: 0.0102 - accuracy: 0.9967 - val_loss: 0.0354 - val_accuracy: 0.9897
Epoch 36/50
677/677 [==============================] - 3s 4ms/step - loss: 0.0073 - accuracy: 0.9976 - val_loss: 0.0211 - val_accuracy: 0.9943
Epoch 37/50
677/677 [==============================] - 3s 4ms/step - loss: 0.0064 - accuracy: 0.9982 - val_loss: 0.0378 - val_accuracy: 0.9904
Epoch 38/50
677/677 [==============================] - 3s 4ms/step - loss: 0.0108 - accuracy: 0.9968 - val_loss: 0.0436 - val_accuracy: 0.9860
Epoch 39/50
677/677 [==============================] - 3s 5ms/step - loss: 0.0059 - accuracy: 0.9982 - val_loss: 0.0221 - val_accuracy: 0.9937
Epoch 40/50
677/677 [==============================] - 3s 5ms/step - loss: 0.0144 - accuracy: 0.9954 - val_loss: 0.0211 - val_accuracy: 0.9937
Epoch 41/50
677/677 [==============================] - 3s 5ms/step - loss: 0.0058 - accuracy: 0.9981 - val_loss: 0.0413 - val_accuracy: 0.9904
Epoch 42/50
677/677 [==============================] - 3s 5ms/step - loss: 0.0080 - accuracy: 0.9976 - val_loss: 0.0439 - val_accuracy: 0.9891
Epoch 43/50
677/677 [==============================] - 3s 5ms/step - loss: 0.0091 - accuracy: 0.9972 - val_loss: 0.0306 - val_accuracy: 0.9897
Epoch 44/50
677/677 [==============================] - 3s 5ms/step - loss: 0.0062 - accuracy: 0.9982 - val_loss: 0.0314 - val_accuracy: 0.9895
Epoch 45/50
677/677 [==============================] - 3s 5ms/step - loss: 0.0019 - accuracy: 0.9993 - val_loss: 0.0311 - val_accuracy: 0.9945
Epoch 46/50
677/677 [==============================] - 3s 5ms/step - loss: 0.0130 - accuracy: 0.9964 - val_loss: 0.0229 - val_accuracy: 0.9930
Epoch 47/50
677/677 [==============================] - 3s 5ms/step - loss: 0.0069 - accuracy: 0.9982 - val_loss: 0.0315 - val_accuracy: 0.9915
Epoch 48/50
677/677 [==============================] - 3s 5ms/step - loss: 0.0067 - accuracy: 0.9980 - val_loss: 0.0222 - val_accuracy: 0.9928
Epoch 49/50
677/677 [==============================] - 3s 5ms/step - loss: 0.0051 - accuracy: 0.9983 - val_loss: 0.0195 - val_accuracy: 0.9948
Epoch 50/50
677/677 [==============================] - 3s 5ms/step - loss: 0.0042 - accuracy: 0.9987 - val_loss: 0.0541 - val_accuracy: 0.9874
In [ ]:
y_pred= model.predict(X_test)
plot_metrics(history, y_test, y_pred)
212/212 [==============================] - 1s 2ms/step
Accuracy:  0.9866942637492608
Precision:  0.9807744381261847
Recall:  0.9947816533919253
F1 score:  0.9877283883283338

ViT¶

Celeb DF¶

In [ ]:
df1=pd.read_csv("../Data/files/files/Celeb-df_vit.csv")
df1.head()
Out[ ]:
Unnamed: 0 0 1 2 3 4 5 6 7 8 ... 439 440 441 442 443 444 445 446 447 Label
0 0 0.319587 0.740929 0.464584 0.725391 -0.012810 -1.149684 -0.038594 -0.327014 -0.154114 ... 0.371236 -0.107152 0.009291 0.768575 -0.685553 0.363147 -0.134060 0.298729 0.410601 0
1 1 0.161553 0.282407 0.303938 0.341088 -0.214515 -0.484006 -0.392677 -0.436100 -0.238849 ... 0.149390 -0.052575 -0.197187 0.180801 -0.777508 0.225731 0.133878 0.147619 0.236145 0
2 2 0.176226 0.332912 0.183711 0.239652 -0.339653 -0.626031 -0.346819 -0.286595 -0.079800 ... 0.212713 0.157118 -0.148664 0.091372 -0.650060 0.241216 0.132933 0.100103 -0.045666 0
3 3 0.117250 0.246266 0.040510 0.296838 -0.354080 -0.398558 -0.260375 -0.149370 -0.117103 ... 0.299755 0.162576 -0.082298 0.042257 -0.574919 0.355091 0.163088 -0.007151 -0.346583 0
4 4 0.187924 0.029395 0.205600 0.142896 -0.162614 -0.471617 -0.374545 -0.373469 -0.125815 ... 0.222033 0.211545 -0.209460 0.072756 -0.709315 0.301771 0.280353 0.137477 -0.074121 0

5 rows × 450 columns

In [ ]:
df1=df1.drop(columns=["Unnamed: 0"],axis=1)
In [ ]:
df1.head()
Out[ ]:
0 1 2 3 4 5 6 7 8 9 ... 439 440 441 442 443 444 445 446 447 Label
0 0.319587 0.740929 0.464584 0.725391 -0.012810 -1.149684 -0.038594 -0.327014 -0.154114 0.384575 ... 0.371236 -0.107152 0.009291 0.768575 -0.685553 0.363147 -0.134060 0.298729 0.410601 0
1 0.161553 0.282407 0.303938 0.341088 -0.214515 -0.484006 -0.392677 -0.436100 -0.238849 0.040627 ... 0.149390 -0.052575 -0.197187 0.180801 -0.777508 0.225731 0.133878 0.147619 0.236145 0
2 0.176226 0.332912 0.183711 0.239652 -0.339653 -0.626031 -0.346819 -0.286595 -0.079800 0.123180 ... 0.212713 0.157118 -0.148664 0.091372 -0.650060 0.241216 0.132933 0.100103 -0.045666 0
3 0.117250 0.246266 0.040510 0.296838 -0.354080 -0.398558 -0.260375 -0.149370 -0.117103 0.228677 ... 0.299755 0.162576 -0.082298 0.042257 -0.574919 0.355091 0.163088 -0.007151 -0.346583 0
4 0.187924 0.029395 0.205600 0.142896 -0.162614 -0.471617 -0.374545 -0.373469 -0.125815 0.051613 ... 0.222033 0.211545 -0.209460 0.072756 -0.709315 0.301771 0.280353 0.137477 -0.074121 0

5 rows × 449 columns

In [ ]:
df1.describe()
Out[ ]:
0 1 2 3 4 5 6 7 8 9 ... 439 440 441 442 443 444 445 446 447 Label
count 30230.000000 30230.000000 30230.000000 30230.000000 30230.000000 30230.000000 30230.000000 30230.000000 30230.000000 30230.000000 ... 30230.000000 30230.000000 30230.000000 30230.000000 30230.000000 30230.000000 30230.000000 30230.000000 30230.000000 30230.000000
mean 0.259316 0.457617 0.445848 0.127436 0.080184 -0.240346 -0.268976 -0.348638 0.068808 0.086026 ... 0.106439 0.064627 -0.286260 0.601747 -0.506296 0.262817 0.028609 -0.026920 0.084267 0.497883
std 0.264986 0.324822 0.247092 0.262888 0.245127 0.430113 0.204650 0.258728 0.209300 0.222315 ... 0.166055 0.340704 0.289539 0.292156 0.229136 0.198547 0.233718 0.225405 0.423091 0.500004
min -0.877252 -1.051733 -0.752733 -1.017211 -0.994259 -2.084225 -1.118278 -1.265651 -0.839471 -0.927544 ... -0.814973 -1.191237 -1.498489 -1.042106 -1.281658 -0.736061 -0.970482 -0.929724 -1.268619 0.000000
25% 0.079479 0.238966 0.295908 -0.044882 -0.080356 -0.548626 -0.399674 -0.528674 -0.066946 -0.066433 ... -0.004448 -0.157839 -0.482820 0.432542 -0.654280 0.137684 -0.125336 -0.176880 -0.214761 0.000000
50% 0.271632 0.474799 0.462970 0.119968 0.081465 -0.267080 -0.272411 -0.360597 0.060369 0.078148 ... 0.115495 0.063312 -0.296643 0.605724 -0.520673 0.272744 0.027090 -0.024731 0.044856 0.000000
75% 0.449859 0.684649 0.621247 0.296774 0.236858 0.039955 -0.140543 -0.179838 0.194579 0.227940 ... 0.218954 0.282649 -0.096090 0.785375 -0.377867 0.396353 0.193513 0.123633 0.363984 1.000000
max 1.171945 1.645007 1.165276 1.460021 1.019962 1.498935 0.735892 0.836205 1.245430 1.102608 ... 0.791295 1.647735 0.992804 1.865433 0.713694 0.975717 0.794580 0.877693 1.627519 1.000000

8 rows × 449 columns

In [ ]:
X = df1.drop('Label', axis=1).values
y = df1['Label'].values
In [ ]:
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
In [ ]:
model = Sequential()
model.add(Dense(128, activation='relu', input_shape=(X_train.shape[1],)))
model.add(Dense(64, activation='relu'))
model.add(Dense(1, activation='sigmoid'))
In [ ]:
model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])
In [ ]:
history = model.fit(X_train, y_train, epochs=100, batch_size=32, validation_split=0.2)
Epoch 1/100
605/605 [==============================] - 2s 4ms/step - loss: 0.5210 - accuracy: 0.7304 - val_loss: 0.5057 - val_accuracy: 0.7335
Epoch 2/100
605/605 [==============================] - 2s 3ms/step - loss: 0.3784 - accuracy: 0.8229 - val_loss: 0.3893 - val_accuracy: 0.8253
Epoch 3/100
605/605 [==============================] - 2s 3ms/step - loss: 0.3092 - accuracy: 0.8594 - val_loss: 0.3201 - val_accuracy: 0.8611
Epoch 4/100
605/605 [==============================] - 2s 3ms/step - loss: 0.2704 - accuracy: 0.8822 - val_loss: 0.2829 - val_accuracy: 0.8778
Epoch 5/100
605/605 [==============================] - 2s 3ms/step - loss: 0.2392 - accuracy: 0.8969 - val_loss: 0.3013 - val_accuracy: 0.8685
Epoch 6/100
605/605 [==============================] - 2s 3ms/step - loss: 0.2058 - accuracy: 0.9105 - val_loss: 0.2722 - val_accuracy: 0.8813
Epoch 7/100
605/605 [==============================] - 2s 3ms/step - loss: 0.1907 - accuracy: 0.9198 - val_loss: 0.2676 - val_accuracy: 0.8873
Epoch 8/100
605/605 [==============================] - 2s 3ms/step - loss: 0.1695 - accuracy: 0.9295 - val_loss: 0.2462 - val_accuracy: 0.9010
Epoch 9/100
605/605 [==============================] - 2s 3ms/step - loss: 0.1515 - accuracy: 0.9362 - val_loss: 0.2664 - val_accuracy: 0.8960
Epoch 10/100
605/605 [==============================] - 2s 3ms/step - loss: 0.1491 - accuracy: 0.9378 - val_loss: 0.2252 - val_accuracy: 0.9090
Epoch 11/100
605/605 [==============================] - 2s 3ms/step - loss: 0.1254 - accuracy: 0.9475 - val_loss: 0.2380 - val_accuracy: 0.9024
Epoch 12/100
605/605 [==============================] - 2s 3ms/step - loss: 0.1209 - accuracy: 0.9507 - val_loss: 0.2347 - val_accuracy: 0.9115
Epoch 13/100
605/605 [==============================] - 2s 3ms/step - loss: 0.1154 - accuracy: 0.9537 - val_loss: 0.2222 - val_accuracy: 0.9192
Epoch 14/100
605/605 [==============================] - 2s 3ms/step - loss: 0.1029 - accuracy: 0.9601 - val_loss: 0.2428 - val_accuracy: 0.9128
Epoch 15/100
605/605 [==============================] - 2s 3ms/step - loss: 0.0993 - accuracy: 0.9601 - val_loss: 0.2249 - val_accuracy: 0.9202
Epoch 16/100
605/605 [==============================] - 2s 3ms/step - loss: 0.0864 - accuracy: 0.9660 - val_loss: 0.2587 - val_accuracy: 0.9111
Epoch 17/100
605/605 [==============================] - 2s 3ms/step - loss: 0.0880 - accuracy: 0.9651 - val_loss: 0.2570 - val_accuracy: 0.9183
Epoch 18/100
605/605 [==============================] - 2s 3ms/step - loss: 0.0784 - accuracy: 0.9702 - val_loss: 0.2195 - val_accuracy: 0.9274
Epoch 19/100
605/605 [==============================] - 2s 3ms/step - loss: 0.0691 - accuracy: 0.9728 - val_loss: 0.2557 - val_accuracy: 0.9202
Epoch 20/100
605/605 [==============================] - 2s 3ms/step - loss: 0.0734 - accuracy: 0.9711 - val_loss: 0.2655 - val_accuracy: 0.9223
Epoch 21/100
605/605 [==============================] - 2s 3ms/step - loss: 0.0669 - accuracy: 0.9737 - val_loss: 0.2997 - val_accuracy: 0.9076
Epoch 22/100
605/605 [==============================] - 2s 3ms/step - loss: 0.0632 - accuracy: 0.9760 - val_loss: 0.2619 - val_accuracy: 0.9233
Epoch 23/100
605/605 [==============================] - 2s 3ms/step - loss: 0.0639 - accuracy: 0.9758 - val_loss: 0.2707 - val_accuracy: 0.9235
Epoch 24/100
605/605 [==============================] - 2s 3ms/step - loss: 0.0570 - accuracy: 0.9784 - val_loss: 0.3060 - val_accuracy: 0.9119
Epoch 25/100
605/605 [==============================] - 2s 3ms/step - loss: 0.0522 - accuracy: 0.9795 - val_loss: 0.2854 - val_accuracy: 0.9250
Epoch 26/100
605/605 [==============================] - 2s 3ms/step - loss: 0.0573 - accuracy: 0.9777 - val_loss: 0.2754 - val_accuracy: 0.9206
Epoch 27/100
605/605 [==============================] - 2s 3ms/step - loss: 0.0534 - accuracy: 0.9788 - val_loss: 0.2530 - val_accuracy: 0.9320
Epoch 28/100
605/605 [==============================] - 2s 3ms/step - loss: 0.0433 - accuracy: 0.9845 - val_loss: 0.2912 - val_accuracy: 0.9223
Epoch 29/100
605/605 [==============================] - 2s 3ms/step - loss: 0.0466 - accuracy: 0.9824 - val_loss: 0.2869 - val_accuracy: 0.9276
Epoch 30/100
605/605 [==============================] - 2s 3ms/step - loss: 0.0469 - accuracy: 0.9824 - val_loss: 0.2737 - val_accuracy: 0.9235
Epoch 31/100
605/605 [==============================] - 2s 3ms/step - loss: 0.0499 - accuracy: 0.9826 - val_loss: 0.2654 - val_accuracy: 0.9270
Epoch 32/100
605/605 [==============================] - 2s 3ms/step - loss: 0.0338 - accuracy: 0.9878 - val_loss: 0.2651 - val_accuracy: 0.9343
Epoch 33/100
605/605 [==============================] - 2s 3ms/step - loss: 0.0426 - accuracy: 0.9838 - val_loss: 0.2739 - val_accuracy: 0.9312
Epoch 34/100
605/605 [==============================] - 2s 3ms/step - loss: 0.0417 - accuracy: 0.9844 - val_loss: 0.2674 - val_accuracy: 0.9349
Epoch 35/100
605/605 [==============================] - 2s 3ms/step - loss: 0.0391 - accuracy: 0.9863 - val_loss: 0.2713 - val_accuracy: 0.9338
Epoch 36/100
605/605 [==============================] - 2s 3ms/step - loss: 0.0427 - accuracy: 0.9831 - val_loss: 0.2848 - val_accuracy: 0.9278
Epoch 37/100
605/605 [==============================] - 2s 3ms/step - loss: 0.0368 - accuracy: 0.9869 - val_loss: 0.2931 - val_accuracy: 0.9243
Epoch 38/100
605/605 [==============================] - 2s 3ms/step - loss: 0.0285 - accuracy: 0.9901 - val_loss: 0.2709 - val_accuracy: 0.9295
Epoch 39/100
605/605 [==============================] - 2s 3ms/step - loss: 0.0374 - accuracy: 0.9865 - val_loss: 0.2741 - val_accuracy: 0.9343
Epoch 40/100
605/605 [==============================] - 2s 3ms/step - loss: 0.0317 - accuracy: 0.9885 - val_loss: 0.3214 - val_accuracy: 0.9287
Epoch 41/100
605/605 [==============================] - 2s 3ms/step - loss: 0.0380 - accuracy: 0.9872 - val_loss: 0.2950 - val_accuracy: 0.9312
Epoch 42/100
605/605 [==============================] - 2s 3ms/step - loss: 0.0300 - accuracy: 0.9896 - val_loss: 0.3083 - val_accuracy: 0.9343
Epoch 43/100
605/605 [==============================] - 2s 3ms/step - loss: 0.0318 - accuracy: 0.9896 - val_loss: 0.2933 - val_accuracy: 0.9285
Epoch 44/100
605/605 [==============================] - 2s 3ms/step - loss: 0.0341 - accuracy: 0.9872 - val_loss: 0.2635 - val_accuracy: 0.9440
Epoch 45/100
605/605 [==============================] - 2s 3ms/step - loss: 0.0240 - accuracy: 0.9916 - val_loss: 0.4152 - val_accuracy: 0.9051
Epoch 46/100
605/605 [==============================] - 2s 3ms/step - loss: 0.0319 - accuracy: 0.9887 - val_loss: 0.2805 - val_accuracy: 0.9338
Epoch 47/100
605/605 [==============================] - 2s 3ms/step - loss: 0.0356 - accuracy: 0.9869 - val_loss: 0.2702 - val_accuracy: 0.9341
Epoch 48/100
605/605 [==============================] - 2s 3ms/step - loss: 0.0296 - accuracy: 0.9901 - val_loss: 0.2627 - val_accuracy: 0.9448
Epoch 49/100
605/605 [==============================] - 2s 3ms/step - loss: 0.0229 - accuracy: 0.9921 - val_loss: 0.3046 - val_accuracy: 0.9347
Epoch 50/100
605/605 [==============================] - 2s 3ms/step - loss: 0.0307 - accuracy: 0.9891 - val_loss: 0.3137 - val_accuracy: 0.9367
Epoch 51/100
605/605 [==============================] - 2s 3ms/step - loss: 0.0270 - accuracy: 0.9908 - val_loss: 0.2662 - val_accuracy: 0.9403
Epoch 52/100
605/605 [==============================] - 2s 3ms/step - loss: 0.0237 - accuracy: 0.9922 - val_loss: 0.3016 - val_accuracy: 0.9357
Epoch 53/100
605/605 [==============================] - 2s 3ms/step - loss: 0.0283 - accuracy: 0.9906 - val_loss: 0.3156 - val_accuracy: 0.9369
Epoch 54/100
605/605 [==============================] - 2s 3ms/step - loss: 0.0209 - accuracy: 0.9940 - val_loss: 0.3363 - val_accuracy: 0.9307
Epoch 55/100
605/605 [==============================] - 2s 3ms/step - loss: 0.0349 - accuracy: 0.9880 - val_loss: 0.2674 - val_accuracy: 0.9361
Epoch 56/100
605/605 [==============================] - 2s 3ms/step - loss: 0.0190 - accuracy: 0.9936 - val_loss: 0.3776 - val_accuracy: 0.9157
Epoch 57/100
605/605 [==============================] - 2s 3ms/step - loss: 0.0262 - accuracy: 0.9910 - val_loss: 0.3247 - val_accuracy: 0.9305
Epoch 58/100
605/605 [==============================] - 2s 3ms/step - loss: 0.0266 - accuracy: 0.9910 - val_loss: 0.2988 - val_accuracy: 0.9353
Epoch 59/100
605/605 [==============================] - 2s 3ms/step - loss: 0.0133 - accuracy: 0.9959 - val_loss: 0.2904 - val_accuracy: 0.9440
Epoch 60/100
605/605 [==============================] - 2s 3ms/step - loss: 0.0304 - accuracy: 0.9902 - val_loss: 0.3277 - val_accuracy: 0.9272
Epoch 61/100
605/605 [==============================] - 2s 3ms/step - loss: 0.0262 - accuracy: 0.9911 - val_loss: 0.2760 - val_accuracy: 0.9353
Epoch 62/100
605/605 [==============================] - 2s 3ms/step - loss: 0.0193 - accuracy: 0.9924 - val_loss: 0.2931 - val_accuracy: 0.9421
Epoch 63/100
605/605 [==============================] - 2s 3ms/step - loss: 0.0141 - accuracy: 0.9955 - val_loss: 0.3207 - val_accuracy: 0.9392
Epoch 64/100
605/605 [==============================] - 2s 3ms/step - loss: 0.0269 - accuracy: 0.9909 - val_loss: 0.3146 - val_accuracy: 0.9322
Epoch 65/100
605/605 [==============================] - 2s 3ms/step - loss: 0.0234 - accuracy: 0.9921 - val_loss: 0.3002 - val_accuracy: 0.9382
Epoch 66/100
605/605 [==============================] - 2s 3ms/step - loss: 0.0139 - accuracy: 0.9958 - val_loss: 0.3868 - val_accuracy: 0.9250
Epoch 67/100
605/605 [==============================] - 2s 3ms/step - loss: 0.0217 - accuracy: 0.9931 - val_loss: 0.3077 - val_accuracy: 0.9386
Epoch 68/100
605/605 [==============================] - 2s 3ms/step - loss: 0.0213 - accuracy: 0.9929 - val_loss: 0.3141 - val_accuracy: 0.9386
Epoch 69/100
605/605 [==============================] - 2s 3ms/step - loss: 0.0221 - accuracy: 0.9943 - val_loss: 0.2820 - val_accuracy: 0.9438
Epoch 70/100
605/605 [==============================] - 2s 3ms/step - loss: 0.0087 - accuracy: 0.9972 - val_loss: 0.3518 - val_accuracy: 0.9345
Epoch 71/100
605/605 [==============================] - 2s 3ms/step - loss: 0.0374 - accuracy: 0.9883 - val_loss: 0.2965 - val_accuracy: 0.9425
Epoch 72/100
605/605 [==============================] - 2s 3ms/step - loss: 0.0142 - accuracy: 0.9956 - val_loss: 0.3544 - val_accuracy: 0.9322
Epoch 73/100
605/605 [==============================] - 2s 3ms/step - loss: 0.0210 - accuracy: 0.9931 - val_loss: 0.2892 - val_accuracy: 0.9460
Epoch 74/100
605/605 [==============================] - 2s 3ms/step - loss: 0.0082 - accuracy: 0.9975 - val_loss: 0.3763 - val_accuracy: 0.9272
Epoch 75/100
605/605 [==============================] - 2s 3ms/step - loss: 0.0272 - accuracy: 0.9906 - val_loss: 0.3706 - val_accuracy: 0.9272
Epoch 76/100
605/605 [==============================] - 2s 3ms/step - loss: 0.0213 - accuracy: 0.9931 - val_loss: 0.3111 - val_accuracy: 0.9355
Epoch 77/100
605/605 [==============================] - 2s 3ms/step - loss: 0.0047 - accuracy: 0.9990 - val_loss: 0.3097 - val_accuracy: 0.9469
Epoch 78/100
605/605 [==============================] - 2s 3ms/step - loss: 0.0379 - accuracy: 0.9885 - val_loss: 0.2855 - val_accuracy: 0.9400
Epoch 79/100
605/605 [==============================] - 2s 3ms/step - loss: 0.0166 - accuracy: 0.9953 - val_loss: 0.3315 - val_accuracy: 0.9357
Epoch 80/100
605/605 [==============================] - 2s 3ms/step - loss: 0.0158 - accuracy: 0.9948 - val_loss: 0.3648 - val_accuracy: 0.9312
Epoch 81/100
605/605 [==============================] - 2s 3ms/step - loss: 0.0167 - accuracy: 0.9937 - val_loss: 0.3043 - val_accuracy: 0.9425
Epoch 82/100
605/605 [==============================] - 2s 3ms/step - loss: 0.0114 - accuracy: 0.9970 - val_loss: 0.3142 - val_accuracy: 0.9394
Epoch 83/100
605/605 [==============================] - 2s 3ms/step - loss: 0.0214 - accuracy: 0.9934 - val_loss: 0.3649 - val_accuracy: 0.9256
Epoch 84/100
605/605 [==============================] - 2s 3ms/step - loss: 0.0191 - accuracy: 0.9945 - val_loss: 0.3008 - val_accuracy: 0.9425
Epoch 85/100
605/605 [==============================] - 2s 3ms/step - loss: 0.0158 - accuracy: 0.9946 - val_loss: 0.2873 - val_accuracy: 0.9442
Epoch 86/100
605/605 [==============================] - 2s 3ms/step - loss: 0.0154 - accuracy: 0.9948 - val_loss: 0.3522 - val_accuracy: 0.9305
Epoch 87/100
605/605 [==============================] - 2s 3ms/step - loss: 0.0219 - accuracy: 0.9923 - val_loss: 0.2889 - val_accuracy: 0.9469
Epoch 88/100
605/605 [==============================] - 2s 3ms/step - loss: 0.0130 - accuracy: 0.9956 - val_loss: 0.3114 - val_accuracy: 0.9382
Epoch 89/100
605/605 [==============================] - 2s 3ms/step - loss: 0.0116 - accuracy: 0.9962 - val_loss: 0.3243 - val_accuracy: 0.9427
Epoch 90/100
605/605 [==============================] - 2s 3ms/step - loss: 0.0031 - accuracy: 0.9991 - val_loss: 0.3012 - val_accuracy: 0.9483
Epoch 91/100
605/605 [==============================] - 2s 3ms/step - loss: 0.0228 - accuracy: 0.9931 - val_loss: 0.3238 - val_accuracy: 0.9303
Epoch 92/100
605/605 [==============================] - 2s 3ms/step - loss: 0.0137 - accuracy: 0.9957 - val_loss: 0.3029 - val_accuracy: 0.9434
Epoch 93/100
605/605 [==============================] - 2s 3ms/step - loss: 0.0174 - accuracy: 0.9944 - val_loss: 0.3253 - val_accuracy: 0.9403
Epoch 94/100
605/605 [==============================] - 2s 3ms/step - loss: 0.0140 - accuracy: 0.9959 - val_loss: 0.3458 - val_accuracy: 0.9351
Epoch 95/100
605/605 [==============================] - 2s 3ms/step - loss: 0.0142 - accuracy: 0.9968 - val_loss: 0.3503 - val_accuracy: 0.9359
Epoch 96/100
605/605 [==============================] - 2s 3ms/step - loss: 0.0190 - accuracy: 0.9931 - val_loss: 0.3330 - val_accuracy: 0.9400
Epoch 97/100
605/605 [==============================] - 2s 3ms/step - loss: 0.0104 - accuracy: 0.9965 - val_loss: 0.4058 - val_accuracy: 0.9241
Epoch 98/100
605/605 [==============================] - 2s 3ms/step - loss: 0.0163 - accuracy: 0.9939 - val_loss: 0.3840 - val_accuracy: 0.9338
Epoch 99/100
605/605 [==============================] - 2s 3ms/step - loss: 0.0112 - accuracy: 0.9968 - val_loss: 0.3583 - val_accuracy: 0.9384
Epoch 100/100
605/605 [==============================] - 2s 3ms/step - loss: 0.0178 - accuracy: 0.9944 - val_loss: 0.3532 - val_accuracy: 0.9365
In [ ]:
y_pred= model.predict(X_test)
plot_metrics(history, y_test, y_pred)
189/189 [==============================] - 0s 1000us/step
Accuracy:  0.9345021501819385
Precision:  0.9240589198036007
Recall:  0.9450954134583194
F1 score:  0.9344587884806356

FaceForensics++¶

In [ ]:
df=pd.read_csv("../Data/files/files/FaceForensics++_vit.csv")
df.head()
Out[ ]:
Unnamed: 0 0 1 2 3 4 5 6 7 8 ... 439 440 441 442 443 444 445 446 447 Label
0 0 0.152438 -0.121375 0.114292 0.435109 -0.507435 -0.624092 0.190492 0.046037 -0.210777 ... 0.166606 -0.503968 -0.216118 0.285240 -0.128606 0.091050 0.150067 0.317554 0.134370 0
1 1 0.163847 -0.192323 0.040283 0.299069 -0.458294 -1.033910 0.174511 0.050176 -0.237243 ... 0.113710 -0.557863 -0.370582 0.408184 -0.203390 0.074348 0.040887 0.314162 0.173738 0
2 2 0.254703 -0.477296 0.059869 0.288169 -0.227808 -0.729224 0.312402 -0.080102 -0.125552 ... 0.086803 -0.506135 -0.453529 0.355232 -0.160394 0.125007 0.288522 0.423472 0.274884 0
3 3 0.390347 0.514306 -0.427429 -0.228258 -0.192464 -0.046658 0.326668 -0.359907 0.035693 ... 0.163242 -0.003001 -0.384819 0.586222 -0.071899 -0.323445 0.295907 -0.225351 0.517398 0
4 4 0.359816 0.448768 0.312162 -0.087348 -0.119048 -0.109513 -0.062974 -0.484983 0.218991 ... 0.137529 -0.571143 0.088718 0.923603 -0.208798 -0.208724 -0.192980 -0.314196 -0.186290 0

5 rows × 450 columns

In [ ]:
df=df.drop(columns=["Unnamed: 0"],axis=1)
In [ ]:
df.head()
Out[ ]:
0 1 2 3 4 5 6 7 8 9 ... 439 440 441 442 443 444 445 446 447 Label
0 0.152438 -0.121375 0.114292 0.435109 -0.507435 -0.624092 0.190492 0.046037 -0.210777 -0.026552 ... 0.166606 -0.503968 -0.216118 0.285240 -0.128606 0.091050 0.150067 0.317554 0.134370 0
1 0.163847 -0.192323 0.040283 0.299069 -0.458294 -1.033910 0.174511 0.050176 -0.237243 0.277858 ... 0.113710 -0.557863 -0.370582 0.408184 -0.203390 0.074348 0.040887 0.314162 0.173738 0
2 0.254703 -0.477296 0.059869 0.288169 -0.227808 -0.729224 0.312402 -0.080102 -0.125552 0.184719 ... 0.086803 -0.506135 -0.453529 0.355232 -0.160394 0.125007 0.288522 0.423472 0.274884 0
3 0.390347 0.514306 -0.427429 -0.228258 -0.192464 -0.046658 0.326668 -0.359907 0.035693 -0.206162 ... 0.163242 -0.003001 -0.384819 0.586222 -0.071899 -0.323445 0.295907 -0.225351 0.517398 0
4 0.359816 0.448768 0.312162 -0.087348 -0.119048 -0.109513 -0.062974 -0.484983 0.218991 -0.187376 ... 0.137529 -0.571143 0.088718 0.923603 -0.208798 -0.208724 -0.192980 -0.314196 -0.186290 0

5 rows × 449 columns

In [ ]:
df.describe()
Out[ ]:
0 1 2 3 4 5 6 7 8 9 ... 439 440 441 442 443 444 445 446 447 Label
count 33823.000000 33823.000000 33823.000000 33823.000000 33823.000000 33823.000000 33823.000000 33823.000000 33823.000000 33823.000000 ... 33823.000000 33823.000000 33823.000000 33823.000000 33823.000000 33823.000000 33823.000000 33823.000000 33823.000000 33823.000000
mean 0.272619 0.281531 0.339054 0.176897 0.044571 -0.231133 -0.249112 -0.325600 0.131958 -0.011497 ... 0.064102 -0.024026 -0.485595 0.618238 -0.324585 0.169320 0.009428 -0.121364 0.252611 0.544215
std 0.285683 0.299512 0.247988 0.286988 0.261253 0.351187 0.210916 0.279473 0.193017 0.209272 ... 0.168881 0.323774 0.282491 0.318749 0.249475 0.221200 0.260220 0.204180 0.301996 0.498049
min -0.716121 -1.091918 -0.970462 -1.265896 -1.513051 -1.655808 -1.130957 -1.279676 -0.977436 -0.822260 ... -0.810001 -1.480015 -1.677552 -1.147435 -1.227208 -0.742887 -1.090384 -1.049094 -1.564107 0.000000
25% 0.060918 0.094214 0.195939 -0.015770 -0.116209 -0.479078 -0.386642 -0.517194 0.001159 -0.156483 ... -0.043560 -0.229300 -0.665989 0.446297 -0.488332 0.021712 -0.165028 -0.262308 0.067304 0.000000
50% 0.266341 0.284008 0.362269 0.183547 0.049469 -0.252696 -0.267005 -0.340202 0.126785 -0.019830 ... 0.056910 -0.021583 -0.479717 0.638513 -0.348752 0.156528 0.013723 -0.119376 0.275894 1.000000
75% 0.476358 0.472212 0.506652 0.381466 0.216911 0.004149 -0.130899 -0.138111 0.262356 0.128056 ... 0.167894 0.185798 -0.308893 0.818612 -0.181892 0.314495 0.197132 0.010702 0.455184 1.000000
max 1.474950 1.395929 1.119541 1.322609 1.164944 1.342574 1.014356 0.852236 0.860625 1.060370 ... 0.802561 1.550066 1.283821 1.889155 0.864893 0.946342 0.826602 0.923870 1.260599 1.000000

8 rows × 449 columns

In [ ]:
X = df.drop('Label', axis=1).values
y = df['Label'].values
In [ ]:
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
In [ ]:
model = Sequential()
model.add(Dense(128, activation='relu', input_shape=(X_train.shape[1],)))
model.add(Dense(64, activation='relu'))
model.add(Dense(1, activation='sigmoid'))
In [ ]:
model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])
In [ ]:
history = model.fit(X_train, y_train, epochs=100, batch_size=32, validation_split=0.2)
Epoch 1/100
677/677 [==============================] - 3s 4ms/step - loss: 0.4636 - accuracy: 0.7763 - val_loss: 0.3019 - val_accuracy: 0.8777
Epoch 2/100
677/677 [==============================] - 2s 3ms/step - loss: 0.2504 - accuracy: 0.9045 - val_loss: 0.2128 - val_accuracy: 0.9154
Epoch 3/100
677/677 [==============================] - 2s 3ms/step - loss: 0.1892 - accuracy: 0.9269 - val_loss: 0.1946 - val_accuracy: 0.9268
Epoch 4/100
677/677 [==============================] - 2s 3ms/step - loss: 0.1596 - accuracy: 0.9377 - val_loss: 0.2256 - val_accuracy: 0.9167
Epoch 5/100
677/677 [==============================] - 2s 3ms/step - loss: 0.1393 - accuracy: 0.9465 - val_loss: 0.1666 - val_accuracy: 0.9374
Epoch 6/100
677/677 [==============================] - 2s 3ms/step - loss: 0.1256 - accuracy: 0.9510 - val_loss: 0.1827 - val_accuracy: 0.9296
Epoch 7/100
677/677 [==============================] - 2s 3ms/step - loss: 0.1105 - accuracy: 0.9573 - val_loss: 0.1874 - val_accuracy: 0.9329
Epoch 8/100
677/677 [==============================] - 2s 3ms/step - loss: 0.1002 - accuracy: 0.9590 - val_loss: 0.1623 - val_accuracy: 0.9429
Epoch 9/100
677/677 [==============================] - 2s 3ms/step - loss: 0.0939 - accuracy: 0.9621 - val_loss: 0.1720 - val_accuracy: 0.9401
Epoch 10/100
677/677 [==============================] - 2s 3ms/step - loss: 0.0896 - accuracy: 0.9652 - val_loss: 0.1712 - val_accuracy: 0.9368
Epoch 11/100
677/677 [==============================] - 2s 3ms/step - loss: 0.0797 - accuracy: 0.9683 - val_loss: 0.1834 - val_accuracy: 0.9401
Epoch 12/100
677/677 [==============================] - 2s 3ms/step - loss: 0.0714 - accuracy: 0.9727 - val_loss: 0.1823 - val_accuracy: 0.9337
Epoch 13/100
677/677 [==============================] - 2s 3ms/step - loss: 0.0712 - accuracy: 0.9721 - val_loss: 0.1585 - val_accuracy: 0.9431
Epoch 14/100
677/677 [==============================] - 2s 3ms/step - loss: 0.0653 - accuracy: 0.9752 - val_loss: 0.1854 - val_accuracy: 0.9337
Epoch 15/100
677/677 [==============================] - 2s 3ms/step - loss: 0.0629 - accuracy: 0.9759 - val_loss: 0.1740 - val_accuracy: 0.9392
Epoch 16/100
677/677 [==============================] - 2s 3ms/step - loss: 0.0590 - accuracy: 0.9766 - val_loss: 0.1627 - val_accuracy: 0.9464
Epoch 17/100
677/677 [==============================] - 2s 3ms/step - loss: 0.0520 - accuracy: 0.9798 - val_loss: 0.2026 - val_accuracy: 0.9446
Epoch 18/100
677/677 [==============================] - 2s 3ms/step - loss: 0.0493 - accuracy: 0.9807 - val_loss: 0.1904 - val_accuracy: 0.9468
Epoch 19/100
677/677 [==============================] - 2s 3ms/step - loss: 0.0540 - accuracy: 0.9798 - val_loss: 0.1810 - val_accuracy: 0.9466
Epoch 20/100
677/677 [==============================] - 2s 3ms/step - loss: 0.0467 - accuracy: 0.9822 - val_loss: 0.1824 - val_accuracy: 0.9508
Epoch 21/100
677/677 [==============================] - 2s 3ms/step - loss: 0.0456 - accuracy: 0.9819 - val_loss: 0.2480 - val_accuracy: 0.9370
Epoch 22/100
677/677 [==============================] - 2s 3ms/step - loss: 0.0455 - accuracy: 0.9824 - val_loss: 0.1958 - val_accuracy: 0.9477
Epoch 23/100
677/677 [==============================] - 2s 3ms/step - loss: 0.0372 - accuracy: 0.9860 - val_loss: 0.2176 - val_accuracy: 0.9425
Epoch 24/100
677/677 [==============================] - 2s 3ms/step - loss: 0.0392 - accuracy: 0.9854 - val_loss: 0.1731 - val_accuracy: 0.9529
Epoch 25/100
677/677 [==============================] - 2s 3ms/step - loss: 0.0351 - accuracy: 0.9864 - val_loss: 0.2118 - val_accuracy: 0.9472
Epoch 26/100
677/677 [==============================] - 2s 3ms/step - loss: 0.0362 - accuracy: 0.9871 - val_loss: 0.1619 - val_accuracy: 0.9588
Epoch 27/100
677/677 [==============================] - 2s 3ms/step - loss: 0.0323 - accuracy: 0.9875 - val_loss: 0.1944 - val_accuracy: 0.9448
Epoch 28/100
677/677 [==============================] - 2s 3ms/step - loss: 0.0364 - accuracy: 0.9869 - val_loss: 0.2028 - val_accuracy: 0.9473
Epoch 29/100
677/677 [==============================] - 2s 3ms/step - loss: 0.0295 - accuracy: 0.9891 - val_loss: 0.1780 - val_accuracy: 0.9555
Epoch 30/100
677/677 [==============================] - 2s 3ms/step - loss: 0.0355 - accuracy: 0.9866 - val_loss: 0.1743 - val_accuracy: 0.9518
Epoch 31/100
677/677 [==============================] - 2s 3ms/step - loss: 0.0293 - accuracy: 0.9895 - val_loss: 0.2101 - val_accuracy: 0.9499
Epoch 32/100
677/677 [==============================] - 2s 3ms/step - loss: 0.0240 - accuracy: 0.9919 - val_loss: 0.1676 - val_accuracy: 0.9558
Epoch 33/100
677/677 [==============================] - 2s 3ms/step - loss: 0.0286 - accuracy: 0.9900 - val_loss: 0.1866 - val_accuracy: 0.9542
Epoch 34/100
677/677 [==============================] - 2s 3ms/step - loss: 0.0270 - accuracy: 0.9902 - val_loss: 0.1934 - val_accuracy: 0.9536
Epoch 35/100
677/677 [==============================] - 2s 3ms/step - loss: 0.0330 - accuracy: 0.9882 - val_loss: 0.1836 - val_accuracy: 0.9521
Epoch 36/100
677/677 [==============================] - 2s 3ms/step - loss: 0.0267 - accuracy: 0.9905 - val_loss: 0.1886 - val_accuracy: 0.9571
Epoch 37/100
677/677 [==============================] - 2s 3ms/step - loss: 0.0184 - accuracy: 0.9936 - val_loss: 0.2237 - val_accuracy: 0.9497
Epoch 38/100
677/677 [==============================] - 2s 3ms/step - loss: 0.0326 - accuracy: 0.9883 - val_loss: 0.1842 - val_accuracy: 0.9571
Epoch 39/100
677/677 [==============================] - 2s 3ms/step - loss: 0.0193 - accuracy: 0.9934 - val_loss: 0.2622 - val_accuracy: 0.9361
Epoch 40/100
677/677 [==============================] - 2s 3ms/step - loss: 0.0259 - accuracy: 0.9906 - val_loss: 0.1976 - val_accuracy: 0.9525
Epoch 41/100
677/677 [==============================] - 2s 3ms/step - loss: 0.0201 - accuracy: 0.9932 - val_loss: 0.2000 - val_accuracy: 0.9499
Epoch 42/100
677/677 [==============================] - 2s 3ms/step - loss: 0.0228 - accuracy: 0.9924 - val_loss: 0.1953 - val_accuracy: 0.9562
Epoch 43/100
677/677 [==============================] - 2s 3ms/step - loss: 0.0199 - accuracy: 0.9932 - val_loss: 0.2246 - val_accuracy: 0.9566
Epoch 44/100
677/677 [==============================] - 2s 3ms/step - loss: 0.0224 - accuracy: 0.9926 - val_loss: 0.2068 - val_accuracy: 0.9540
Epoch 45/100
677/677 [==============================] - 2s 3ms/step - loss: 0.0199 - accuracy: 0.9939 - val_loss: 0.1985 - val_accuracy: 0.9577
Epoch 46/100
677/677 [==============================] - 2s 3ms/step - loss: 0.0163 - accuracy: 0.9945 - val_loss: 0.1979 - val_accuracy: 0.9579
Epoch 47/100
677/677 [==============================] - 2s 3ms/step - loss: 0.0232 - accuracy: 0.9921 - val_loss: 0.1885 - val_accuracy: 0.9592
Epoch 48/100
677/677 [==============================] - 2s 3ms/step - loss: 0.0227 - accuracy: 0.9922 - val_loss: 0.1851 - val_accuracy: 0.9608
Epoch 49/100
677/677 [==============================] - 2s 3ms/step - loss: 0.0145 - accuracy: 0.9953 - val_loss: 0.1804 - val_accuracy: 0.9588
Epoch 50/100
677/677 [==============================] - 2s 3ms/step - loss: 0.0151 - accuracy: 0.9952 - val_loss: 0.2240 - val_accuracy: 0.9540
Epoch 51/100
677/677 [==============================] - 2s 3ms/step - loss: 0.0251 - accuracy: 0.9913 - val_loss: 0.1716 - val_accuracy: 0.9619
Epoch 52/100
677/677 [==============================] - 2s 3ms/step - loss: 0.0139 - accuracy: 0.9951 - val_loss: 0.2034 - val_accuracy: 0.9614
Epoch 53/100
677/677 [==============================] - 2s 3ms/step - loss: 0.0210 - accuracy: 0.9929 - val_loss: 0.1907 - val_accuracy: 0.9614
Epoch 54/100
677/677 [==============================] - 2s 3ms/step - loss: 0.0105 - accuracy: 0.9963 - val_loss: 0.2053 - val_accuracy: 0.9619
Epoch 55/100
677/677 [==============================] - 2s 3ms/step - loss: 0.0154 - accuracy: 0.9948 - val_loss: 0.2465 - val_accuracy: 0.9538
Epoch 56/100
677/677 [==============================] - 2s 3ms/step - loss: 0.0186 - accuracy: 0.9939 - val_loss: 0.2109 - val_accuracy: 0.9581
Epoch 57/100
677/677 [==============================] - 2s 3ms/step - loss: 0.0137 - accuracy: 0.9953 - val_loss: 0.2915 - val_accuracy: 0.9508
Epoch 58/100
677/677 [==============================] - 2s 3ms/step - loss: 0.0195 - accuracy: 0.9933 - val_loss: 0.2471 - val_accuracy: 0.9549
Epoch 59/100
677/677 [==============================] - 2s 3ms/step - loss: 0.0158 - accuracy: 0.9941 - val_loss: 0.2222 - val_accuracy: 0.9538
Epoch 60/100
677/677 [==============================] - 2s 3ms/step - loss: 0.0109 - accuracy: 0.9959 - val_loss: 0.2119 - val_accuracy: 0.9597
Epoch 61/100
677/677 [==============================] - 2s 3ms/step - loss: 0.0233 - accuracy: 0.9926 - val_loss: 0.2192 - val_accuracy: 0.9569
Epoch 62/100
677/677 [==============================] - 2s 3ms/step - loss: 0.0096 - accuracy: 0.9971 - val_loss: 0.1921 - val_accuracy: 0.9593
Epoch 63/100
677/677 [==============================] - 2s 3ms/step - loss: 0.0090 - accuracy: 0.9971 - val_loss: 0.2679 - val_accuracy: 0.9496
Epoch 64/100
677/677 [==============================] - 2s 3ms/step - loss: 0.0210 - accuracy: 0.9937 - val_loss: 0.1900 - val_accuracy: 0.9597
Epoch 65/100
677/677 [==============================] - 2s 3ms/step - loss: 0.0122 - accuracy: 0.9959 - val_loss: 0.2149 - val_accuracy: 0.9619
Epoch 66/100
677/677 [==============================] - 2s 3ms/step - loss: 0.0125 - accuracy: 0.9959 - val_loss: 0.2198 - val_accuracy: 0.9579
Epoch 67/100
677/677 [==============================] - 2s 3ms/step - loss: 0.0072 - accuracy: 0.9978 - val_loss: 0.1886 - val_accuracy: 0.9630
Epoch 68/100
677/677 [==============================] - 2s 3ms/step - loss: 0.0175 - accuracy: 0.9934 - val_loss: 0.2342 - val_accuracy: 0.9533
Epoch 69/100
677/677 [==============================] - 2s 3ms/step - loss: 0.0115 - accuracy: 0.9969 - val_loss: 0.3015 - val_accuracy: 0.9497
Epoch 70/100
677/677 [==============================] - 2s 3ms/step - loss: 0.0164 - accuracy: 0.9947 - val_loss: 0.2221 - val_accuracy: 0.9579
Epoch 71/100
677/677 [==============================] - 2s 3ms/step - loss: 0.0136 - accuracy: 0.9956 - val_loss: 0.2246 - val_accuracy: 0.9523
Epoch 72/100
677/677 [==============================] - 2s 3ms/step - loss: 0.0106 - accuracy: 0.9964 - val_loss: 0.2298 - val_accuracy: 0.9581
Epoch 73/100
677/677 [==============================] - 2s 3ms/step - loss: 0.0174 - accuracy: 0.9945 - val_loss: 0.2364 - val_accuracy: 0.9497
Epoch 74/100
677/677 [==============================] - 2s 3ms/step - loss: 0.0070 - accuracy: 0.9978 - val_loss: 0.2059 - val_accuracy: 0.9616
Epoch 75/100
677/677 [==============================] - 2s 3ms/step - loss: 0.0135 - accuracy: 0.9957 - val_loss: 0.2104 - val_accuracy: 0.9577
Epoch 76/100
677/677 [==============================] - 2s 3ms/step - loss: 0.0142 - accuracy: 0.9945 - val_loss: 0.2455 - val_accuracy: 0.9544
Epoch 77/100
677/677 [==============================] - 2s 3ms/step - loss: 0.0134 - accuracy: 0.9954 - val_loss: 0.2271 - val_accuracy: 0.9630
Epoch 78/100
677/677 [==============================] - 2s 3ms/step - loss: 0.0015 - accuracy: 0.9997 - val_loss: 0.2038 - val_accuracy: 0.9664
Epoch 79/100
677/677 [==============================] - 2s 3ms/step - loss: 0.0147 - accuracy: 0.9952 - val_loss: 0.2080 - val_accuracy: 0.9592
Epoch 80/100
677/677 [==============================] - 2s 3ms/step - loss: 0.0178 - accuracy: 0.9952 - val_loss: 0.3003 - val_accuracy: 0.9521
Epoch 81/100
677/677 [==============================] - 2s 3ms/step - loss: 0.0084 - accuracy: 0.9978 - val_loss: 0.2055 - val_accuracy: 0.9629
Epoch 82/100
677/677 [==============================] - 2s 3ms/step - loss: 0.0128 - accuracy: 0.9973 - val_loss: 0.2150 - val_accuracy: 0.9597
Epoch 83/100
677/677 [==============================] - 2s 3ms/step - loss: 0.0111 - accuracy: 0.9970 - val_loss: 0.2099 - val_accuracy: 0.9640
Epoch 84/100
677/677 [==============================] - 2s 3ms/step - loss: 0.0147 - accuracy: 0.9955 - val_loss: 0.1858 - val_accuracy: 0.9662
Epoch 85/100
677/677 [==============================] - 2s 3ms/step - loss: 0.0070 - accuracy: 0.9976 - val_loss: 0.1903 - val_accuracy: 0.9625
Epoch 86/100
677/677 [==============================] - 2s 3ms/step - loss: 0.0124 - accuracy: 0.9956 - val_loss: 0.2082 - val_accuracy: 0.9619
Epoch 87/100
677/677 [==============================] - 2s 3ms/step - loss: 0.0086 - accuracy: 0.9976 - val_loss: 0.1962 - val_accuracy: 0.9654
Epoch 88/100
677/677 [==============================] - 2s 3ms/step - loss: 0.0109 - accuracy: 0.9966 - val_loss: 0.1950 - val_accuracy: 0.9625
Epoch 89/100
677/677 [==============================] - 2s 3ms/step - loss: 0.0051 - accuracy: 0.9986 - val_loss: 0.1870 - val_accuracy: 0.9654
Epoch 90/100
677/677 [==============================] - 2s 3ms/step - loss: 0.0135 - accuracy: 0.9954 - val_loss: 0.2436 - val_accuracy: 0.9510
Epoch 91/100
677/677 [==============================] - 2s 3ms/step - loss: 0.0091 - accuracy: 0.9969 - val_loss: 0.2226 - val_accuracy: 0.9571
Epoch 92/100
677/677 [==============================] - 2s 3ms/step - loss: 0.0129 - accuracy: 0.9958 - val_loss: 0.2645 - val_accuracy: 0.9557
Epoch 93/100
677/677 [==============================] - 2s 3ms/step - loss: 0.0073 - accuracy: 0.9978 - val_loss: 0.2068 - val_accuracy: 0.9581
Epoch 94/100
677/677 [==============================] - 2s 3ms/step - loss: 0.0014 - accuracy: 0.9999 - val_loss: 0.2045 - val_accuracy: 0.9656
Epoch 95/100
677/677 [==============================] - 2s 3ms/step - loss: 0.0049 - accuracy: 0.9990 - val_loss: 0.3014 - val_accuracy: 0.9564
Epoch 96/100
677/677 [==============================] - 2s 3ms/step - loss: 0.0186 - accuracy: 0.9940 - val_loss: 0.2105 - val_accuracy: 0.9629
Epoch 97/100
677/677 [==============================] - 2s 3ms/step - loss: 0.0137 - accuracy: 0.9962 - val_loss: 0.2263 - val_accuracy: 0.9586
Epoch 98/100
677/677 [==============================] - 2s 3ms/step - loss: 0.0080 - accuracy: 0.9975 - val_loss: 0.1911 - val_accuracy: 0.9667
Epoch 99/100
677/677 [==============================] - 2s 3ms/step - loss: 0.0040 - accuracy: 0.9991 - val_loss: 0.1900 - val_accuracy: 0.9693
Epoch 100/100
677/677 [==============================] - 2s 3ms/step - loss: 0.0149 - accuracy: 0.9956 - val_loss: 0.2355 - val_accuracy: 0.9593
In [ ]:
y_pred= model.predict(X_test)
plot_metrics(history, y_test, y_pred)
212/212 [==============================] - 0s 1ms/step
Accuracy:  0.955949741315595
Precision:  0.9546195652173913
Recall:  0.9640504939626784
F1 score:  0.9593118514472966

ELA+ViT+GRU¶

Celeb DF¶

In [ ]:
df1=pd.read_csv("../Data/celebdfELAEfficientFormer.csv")
df1.head()
Out[ ]:
Unnamed: 0 0 1 2 3 4 5 6 7 8 ... 759 760 761 762 763 764 765 766 767 label
0 0 0.025186 -0.449716 0.068540 -0.088177 0.676742 -0.129679 0.194051 0.451481 -0.364540 ... 0.280182 0.644649 -0.343197 -0.078438 0.272100 2.226118 0.493412 0.674437 0.194667 0
1 1 -0.095308 0.087300 -0.011636 -0.130743 0.835891 -0.103505 0.100504 0.359275 -0.214617 ... 0.190872 0.399202 -0.337352 0.059878 -0.018754 2.373381 0.497917 0.992538 0.213082 0
2 2 -0.038010 0.093009 0.308163 0.085492 0.568194 -0.287209 0.198596 0.257177 -0.331733 ... 0.453456 0.351223 -0.241861 -0.024323 -0.243413 1.896587 0.562990 1.003954 0.255093 0
3 3 0.169853 -0.274449 0.199159 0.041275 0.632550 -0.679584 -0.043747 0.220982 -0.367786 ... 0.418552 0.590394 -0.376741 0.121219 -0.000668 1.857692 0.554728 1.193748 0.176276 0
4 4 -0.126610 0.127802 0.298108 0.058954 0.706597 -0.257466 0.016120 0.131400 -0.087156 ... 0.173684 0.456634 -0.362030 0.174100 -0.194326 1.992287 0.563068 1.015490 0.146547 0

5 rows × 770 columns

In [ ]:
df1=df1.drop(columns=["Unnamed: 0"],axis=1)
In [ ]:
df1.head()
Out[ ]:
0 1 2 3 4 5 6 7 8 9 ... 759 760 761 762 763 764 765 766 767 label
0 0.025186 -0.449716 0.068540 -0.088177 0.676742 -0.129679 0.194051 0.451481 -0.364540 -0.357125 ... 0.280182 0.644649 -0.343197 -0.078438 0.272100 2.226118 0.493412 0.674437 0.194667 0
1 -0.095308 0.087300 -0.011636 -0.130743 0.835891 -0.103505 0.100504 0.359275 -0.214617 -0.195753 ... 0.190872 0.399202 -0.337352 0.059878 -0.018754 2.373381 0.497917 0.992538 0.213082 0
2 -0.038010 0.093009 0.308163 0.085492 0.568194 -0.287209 0.198596 0.257177 -0.331733 -0.204873 ... 0.453456 0.351223 -0.241861 -0.024323 -0.243413 1.896587 0.562990 1.003954 0.255093 0
3 0.169853 -0.274449 0.199159 0.041275 0.632550 -0.679584 -0.043747 0.220982 -0.367786 -0.268311 ... 0.418552 0.590394 -0.376741 0.121219 -0.000668 1.857692 0.554728 1.193748 0.176276 0
4 -0.126610 0.127802 0.298108 0.058954 0.706597 -0.257466 0.016120 0.131400 -0.087156 -0.428363 ... 0.173684 0.456634 -0.362030 0.174100 -0.194326 1.992287 0.563068 1.015490 0.146547 0

5 rows × 769 columns

In [ ]:
df1.describe()
Out[ ]:
0 1 2 3 4 5 6 7 8 9 ... 759 760 761 762 763 764 765 766 767 label
count 29736.000000 29736.000000 29736.000000 29736.000000 29736.000000 29736.000000 29736.000000 29736.000000 29736.000000 29736.000000 ... 29736.000000 29736.000000 29736.000000 29736.000000 29736.000000 29736.000000 29736.000000 29736.000000 29736.000000 29736.000000
mean 0.037555 -0.179992 0.148113 0.234918 0.611928 -0.000502 0.302173 0.374693 0.001347 -0.441403 ... 0.314177 0.417635 -0.371263 0.089894 0.459800 2.399432 0.631343 0.847298 0.279537 0.505751
std 0.214848 0.369348 0.239389 0.206890 0.192872 0.478599 0.249763 0.195433 0.288792 0.211083 ... 0.192939 0.344610 0.190637 0.225932 0.349579 0.592963 0.318731 0.424755 0.217199 0.499975
min -0.844092 -1.897691 -0.802899 -0.434313 -0.248805 -2.045574 -1.399551 -0.432623 -1.020128 -1.157032 ... -0.599320 -0.817217 -1.150233 -0.773274 -0.724404 -0.630124 -0.377874 -0.701382 -0.681044 0.000000
25% -0.101387 -0.405809 -0.014997 0.093391 0.489322 -0.306624 0.159186 0.251412 -0.196562 -0.583558 ... 0.189330 0.194405 -0.490313 -0.066021 0.221532 2.005529 0.401880 0.561396 0.137134 0.000000
50% 0.037309 -0.159869 0.135341 0.229316 0.619911 0.014231 0.326864 0.381211 -0.018060 -0.457076 ... 0.318100 0.407026 -0.370159 0.085580 0.447293 2.388753 0.608100 0.815331 0.283761 1.000000
75% 0.180088 0.064252 0.300395 0.367237 0.745467 0.322147 0.470344 0.506971 0.181824 -0.312124 ... 0.440712 0.632685 -0.249568 0.243186 0.693832 2.796120 0.839428 1.097490 0.423073 1.000000
max 0.834284 1.363669 1.226258 1.079529 1.278072 1.751863 1.157341 1.047349 1.402732 0.634696 ... 1.090721 1.760433 0.574692 1.059329 1.683764 4.601253 2.097823 2.642897 1.205982 1.000000

8 rows × 769 columns

In [ ]:
X = df1.drop('label', axis=1).values
y = df1['label'].values
In [ ]:
X = X[:5*(len(X)//5)]
y=y[:5*(len(y)//5)]
In [ ]:
X_windows, y_windows = create_windows(X, y, window_size)
X_windows=np.array(X_windows)
y_windows=np.array(y_windows)
In [ ]:
X_train, X_test, y_train, y_test = train_test_split(X_windows, y_windows, test_size=0.2, random_state=42)
In [ ]:
X_train.shape
Out[ ]:
(23784, 5, 768)
In [ ]:
model = Sequential()

# Add a GRU layer
model.add(GRU(units=64, input_shape=(window_size, X_train.shape[2]),return_sequences=True)) 
model.add(GRU(units=64, return_sequences=False))  


model.add(Dense(units=1, activation='sigmoid'))
In [ ]:
model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])
In [ ]:
model.summary()
Model: "sequential_4"
_________________________________________________________________
 Layer (type)                Output Shape              Param #   
=================================================================
 gru_2 (GRU)                 (None, 5, 64)             160128    
                                                                 
 gru_3 (GRU)                 (None, 64)                24960     
                                                                 
 dense_12 (Dense)            (None, 1)                 65        
                                                                 
=================================================================
Total params: 185,153
Trainable params: 185,153
Non-trainable params: 0
_________________________________________________________________
In [ ]:
history = model.fit(X_train, y_train, epochs=100, batch_size=32, validation_split=0.2)
Epoch 1/100
595/595 [==============================] - 6s 7ms/step - loss: 0.5682 - accuracy: 0.6938 - val_loss: 0.4443 - val_accuracy: 0.7847
Epoch 2/100
595/595 [==============================] - 4s 6ms/step - loss: 0.3931 - accuracy: 0.8148 - val_loss: 0.3342 - val_accuracy: 0.8501
Epoch 3/100
595/595 [==============================] - 4s 6ms/step - loss: 0.2831 - accuracy: 0.8737 - val_loss: 0.2883 - val_accuracy: 0.8749
Epoch 4/100
595/595 [==============================] - 4s 6ms/step - loss: 0.2024 - accuracy: 0.9136 - val_loss: 0.2382 - val_accuracy: 0.9031
Epoch 5/100
595/595 [==============================] - 4s 6ms/step - loss: 0.1562 - accuracy: 0.9349 - val_loss: 0.2056 - val_accuracy: 0.9176
Epoch 6/100
595/595 [==============================] - 4s 6ms/step - loss: 0.1177 - accuracy: 0.9533 - val_loss: 0.1734 - val_accuracy: 0.9298
Epoch 7/100
595/595 [==============================] - 4s 6ms/step - loss: 0.0968 - accuracy: 0.9609 - val_loss: 0.1418 - val_accuracy: 0.9474
Epoch 8/100
595/595 [==============================] - 4s 6ms/step - loss: 0.0726 - accuracy: 0.9722 - val_loss: 0.1135 - val_accuracy: 0.9577
Epoch 9/100
595/595 [==============================] - 4s 6ms/step - loss: 0.0688 - accuracy: 0.9740 - val_loss: 0.1434 - val_accuracy: 0.9506
Epoch 10/100
595/595 [==============================] - 4s 6ms/step - loss: 0.0619 - accuracy: 0.9754 - val_loss: 0.1087 - val_accuracy: 0.9609
Epoch 11/100
595/595 [==============================] - 4s 6ms/step - loss: 0.0493 - accuracy: 0.9819 - val_loss: 0.1099 - val_accuracy: 0.9620
Epoch 12/100
595/595 [==============================] - 4s 6ms/step - loss: 0.0464 - accuracy: 0.9824 - val_loss: 0.1018 - val_accuracy: 0.9662
Epoch 13/100
595/595 [==============================] - 3s 6ms/step - loss: 0.0372 - accuracy: 0.9869 - val_loss: 0.2316 - val_accuracy: 0.9239
Epoch 14/100
595/595 [==============================] - 3s 5ms/step - loss: 0.0411 - accuracy: 0.9852 - val_loss: 0.0837 - val_accuracy: 0.9680
Epoch 15/100
595/595 [==============================] - 3s 5ms/step - loss: 0.0345 - accuracy: 0.9872 - val_loss: 0.0654 - val_accuracy: 0.9762
Epoch 16/100
595/595 [==============================] - 3s 6ms/step - loss: 0.0322 - accuracy: 0.9884 - val_loss: 0.1666 - val_accuracy: 0.9451
Epoch 17/100
595/595 [==============================] - 3s 6ms/step - loss: 0.0349 - accuracy: 0.9886 - val_loss: 0.0581 - val_accuracy: 0.9781
Epoch 18/100
595/595 [==============================] - 3s 6ms/step - loss: 0.0257 - accuracy: 0.9913 - val_loss: 0.0927 - val_accuracy: 0.9725
Epoch 19/100
595/595 [==============================] - 3s 6ms/step - loss: 0.0320 - accuracy: 0.9887 - val_loss: 0.1142 - val_accuracy: 0.9613
Epoch 20/100
595/595 [==============================] - 3s 6ms/step - loss: 0.0273 - accuracy: 0.9896 - val_loss: 0.0775 - val_accuracy: 0.9762
Epoch 21/100
595/595 [==============================] - 3s 6ms/step - loss: 0.0225 - accuracy: 0.9921 - val_loss: 0.1113 - val_accuracy: 0.9664
Epoch 22/100
595/595 [==============================] - 4s 6ms/step - loss: 0.0257 - accuracy: 0.9905 - val_loss: 0.0592 - val_accuracy: 0.9834
Epoch 23/100
595/595 [==============================] - 3s 6ms/step - loss: 0.0188 - accuracy: 0.9938 - val_loss: 0.0850 - val_accuracy: 0.9737
Epoch 24/100
595/595 [==============================] - 3s 6ms/step - loss: 0.0241 - accuracy: 0.9914 - val_loss: 0.0559 - val_accuracy: 0.9807
Epoch 25/100
595/595 [==============================] - 3s 6ms/step - loss: 0.0199 - accuracy: 0.9934 - val_loss: 0.0461 - val_accuracy: 0.9863
Epoch 26/100
595/595 [==============================] - 3s 6ms/step - loss: 0.0154 - accuracy: 0.9954 - val_loss: 0.0716 - val_accuracy: 0.9733
Epoch 27/100
595/595 [==============================] - 3s 6ms/step - loss: 0.0228 - accuracy: 0.9917 - val_loss: 0.1066 - val_accuracy: 0.9708
Epoch 28/100
595/595 [==============================] - 3s 6ms/step - loss: 0.0196 - accuracy: 0.9933 - val_loss: 0.0425 - val_accuracy: 0.9870
Epoch 29/100
595/595 [==============================] - 3s 6ms/step - loss: 0.0138 - accuracy: 0.9955 - val_loss: 0.0408 - val_accuracy: 0.9886
Epoch 30/100
595/595 [==============================] - 3s 6ms/step - loss: 0.0195 - accuracy: 0.9932 - val_loss: 0.2950 - val_accuracy: 0.9254
Epoch 31/100
595/595 [==============================] - 3s 6ms/step - loss: 0.0180 - accuracy: 0.9943 - val_loss: 0.1005 - val_accuracy: 0.9706
Epoch 32/100
595/595 [==============================] - 3s 6ms/step - loss: 0.0149 - accuracy: 0.9950 - val_loss: 0.0632 - val_accuracy: 0.9798
Epoch 33/100
595/595 [==============================] - 3s 6ms/step - loss: 0.0228 - accuracy: 0.9917 - val_loss: 0.0658 - val_accuracy: 0.9788
Epoch 34/100
595/595 [==============================] - 3s 6ms/step - loss: 0.0123 - accuracy: 0.9961 - val_loss: 0.0700 - val_accuracy: 0.9792
Epoch 35/100
595/595 [==============================] - 4s 6ms/step - loss: 0.0141 - accuracy: 0.9953 - val_loss: 0.1048 - val_accuracy: 0.9683
Epoch 36/100
595/595 [==============================] - 4s 6ms/step - loss: 0.0191 - accuracy: 0.9941 - val_loss: 0.0673 - val_accuracy: 0.9809
Epoch 37/100
595/595 [==============================] - 3s 6ms/step - loss: 0.0198 - accuracy: 0.9930 - val_loss: 0.0596 - val_accuracy: 0.9802
Epoch 38/100
595/595 [==============================] - 4s 6ms/step - loss: 0.0091 - accuracy: 0.9968 - val_loss: 0.0411 - val_accuracy: 0.9868
Epoch 39/100
595/595 [==============================] - 3s 6ms/step - loss: 0.0146 - accuracy: 0.9956 - val_loss: 0.1167 - val_accuracy: 0.9657
Epoch 40/100
595/595 [==============================] - 3s 6ms/step - loss: 0.0079 - accuracy: 0.9971 - val_loss: 0.0373 - val_accuracy: 0.9893
Epoch 41/100
595/595 [==============================] - 4s 6ms/step - loss: 0.0153 - accuracy: 0.9948 - val_loss: 0.0341 - val_accuracy: 0.9899
Epoch 42/100
595/595 [==============================] - 4s 6ms/step - loss: 3.8028e-04 - accuracy: 1.0000 - val_loss: 0.0284 - val_accuracy: 0.9914
Epoch 43/100
595/595 [==============================] - 4s 6ms/step - loss: 1.1975e-04 - accuracy: 1.0000 - val_loss: 0.0306 - val_accuracy: 0.9920
Epoch 44/100
595/595 [==============================] - 4s 6ms/step - loss: 6.2514e-05 - accuracy: 1.0000 - val_loss: 0.0322 - val_accuracy: 0.9920
Epoch 45/100
595/595 [==============================] - 4s 6ms/step - loss: 3.7462e-05 - accuracy: 1.0000 - val_loss: 0.0338 - val_accuracy: 0.9918
Epoch 46/100
595/595 [==============================] - 4s 6ms/step - loss: 2.2921e-05 - accuracy: 1.0000 - val_loss: 0.0358 - val_accuracy: 0.9918
Epoch 47/100
595/595 [==============================] - 4s 6ms/step - loss: 1.4356e-05 - accuracy: 1.0000 - val_loss: 0.0375 - val_accuracy: 0.9920
Epoch 48/100
595/595 [==============================] - 4s 6ms/step - loss: 9.2509e-06 - accuracy: 1.0000 - val_loss: 0.0392 - val_accuracy: 0.9922
Epoch 49/100
595/595 [==============================] - 4s 6ms/step - loss: 6.1832e-06 - accuracy: 1.0000 - val_loss: 0.0412 - val_accuracy: 0.9920
Epoch 50/100
595/595 [==============================] - 4s 6ms/step - loss: 4.1395e-06 - accuracy: 1.0000 - val_loss: 0.0429 - val_accuracy: 0.9924
Epoch 51/100
595/595 [==============================] - 4s 6ms/step - loss: 2.7758e-06 - accuracy: 1.0000 - val_loss: 0.0450 - val_accuracy: 0.9922
Epoch 52/100
595/595 [==============================] - 3s 6ms/step - loss: 1.8815e-06 - accuracy: 1.0000 - val_loss: 0.0469 - val_accuracy: 0.9929
Epoch 53/100
595/595 [==============================] - 3s 6ms/step - loss: 1.3326e-06 - accuracy: 1.0000 - val_loss: 0.0489 - val_accuracy: 0.9922
Epoch 54/100
595/595 [==============================] - 3s 6ms/step - loss: 9.3066e-07 - accuracy: 1.0000 - val_loss: 0.0512 - val_accuracy: 0.9922
Epoch 55/100
595/595 [==============================] - 3s 5ms/step - loss: 6.7715e-07 - accuracy: 1.0000 - val_loss: 0.0534 - val_accuracy: 0.9916
Epoch 56/100
595/595 [==============================] - 3s 6ms/step - loss: 4.9621e-07 - accuracy: 1.0000 - val_loss: 0.0552 - val_accuracy: 0.9922
Epoch 57/100
595/595 [==============================] - 3s 6ms/step - loss: 3.6088e-07 - accuracy: 1.0000 - val_loss: 0.0576 - val_accuracy: 0.9920
Epoch 58/100
595/595 [==============================] - 3s 6ms/step - loss: 2.5379e-07 - accuracy: 1.0000 - val_loss: 0.0603 - val_accuracy: 0.9905
Epoch 59/100
595/595 [==============================] - 4s 6ms/step - loss: 1.9344e-07 - accuracy: 1.0000 - val_loss: 0.0619 - val_accuracy: 0.9916
Epoch 60/100
595/595 [==============================] - 3s 6ms/step - loss: 1.4705e-07 - accuracy: 1.0000 - val_loss: 0.0634 - val_accuracy: 0.9914
Epoch 61/100
595/595 [==============================] - 3s 6ms/step - loss: 1.0123e-07 - accuracy: 1.0000 - val_loss: 0.0656 - val_accuracy: 0.9903
Epoch 62/100
595/595 [==============================] - 3s 6ms/step - loss: 7.4840e-08 - accuracy: 1.0000 - val_loss: 0.0672 - val_accuracy: 0.9910
Epoch 63/100
595/595 [==============================] - 3s 6ms/step - loss: 5.6293e-08 - accuracy: 1.0000 - val_loss: 0.0698 - val_accuracy: 0.9903
Epoch 64/100
595/595 [==============================] - 4s 6ms/step - loss: 4.3893e-08 - accuracy: 1.0000 - val_loss: 0.0718 - val_accuracy: 0.9908
Epoch 65/100
595/595 [==============================] - 3s 6ms/step - loss: 3.2538e-08 - accuracy: 1.0000 - val_loss: 0.0731 - val_accuracy: 0.9903
Epoch 66/100
595/595 [==============================] - 3s 6ms/step - loss: 2.7021e-08 - accuracy: 1.0000 - val_loss: 0.0750 - val_accuracy: 0.9903
Epoch 67/100
595/595 [==============================] - 3s 6ms/step - loss: 1.8983e-08 - accuracy: 1.0000 - val_loss: 0.0760 - val_accuracy: 0.9901
Epoch 68/100
595/595 [==============================] - 3s 6ms/step - loss: 1.4639e-08 - accuracy: 1.0000 - val_loss: 0.0778 - val_accuracy: 0.9903
Epoch 69/100
595/595 [==============================] - 3s 6ms/step - loss: 1.1215e-08 - accuracy: 1.0000 - val_loss: 0.0794 - val_accuracy: 0.9899
Epoch 70/100
595/595 [==============================] - 3s 6ms/step - loss: 9.0695e-09 - accuracy: 1.0000 - val_loss: 0.0819 - val_accuracy: 0.9899
Epoch 71/100
595/595 [==============================] - 3s 6ms/step - loss: 7.9337e-09 - accuracy: 1.0000 - val_loss: 0.0894 - val_accuracy: 0.9882
Epoch 72/100
595/595 [==============================] - 4s 6ms/step - loss: 0.0853 - accuracy: 0.9796 - val_loss: 0.1665 - val_accuracy: 0.9479
Epoch 73/100
595/595 [==============================] - 4s 6ms/step - loss: 0.0136 - accuracy: 0.9957 - val_loss: 0.0357 - val_accuracy: 0.9874
Epoch 74/100
595/595 [==============================] - 3s 6ms/step - loss: 0.0132 - accuracy: 0.9964 - val_loss: 0.0952 - val_accuracy: 0.9668
Epoch 75/100
595/595 [==============================] - 3s 6ms/step - loss: 0.0155 - accuracy: 0.9947 - val_loss: 0.0843 - val_accuracy: 0.9725
Epoch 76/100
595/595 [==============================] - 4s 6ms/step - loss: 0.0130 - accuracy: 0.9962 - val_loss: 0.1119 - val_accuracy: 0.9634
Epoch 77/100
595/595 [==============================] - 3s 6ms/step - loss: 0.0171 - accuracy: 0.9939 - val_loss: 0.0684 - val_accuracy: 0.9800
Epoch 78/100
595/595 [==============================] - 4s 6ms/step - loss: 0.0034 - accuracy: 0.9990 - val_loss: 0.0418 - val_accuracy: 0.9884
Epoch 79/100
595/595 [==============================] - 4s 6ms/step - loss: 0.0175 - accuracy: 0.9942 - val_loss: 0.0549 - val_accuracy: 0.9878
Epoch 80/100
595/595 [==============================] - 4s 6ms/step - loss: 0.0181 - accuracy: 0.9939 - val_loss: 0.0765 - val_accuracy: 0.9746
Epoch 81/100
595/595 [==============================] - 4s 6ms/step - loss: 0.0107 - accuracy: 0.9966 - val_loss: 0.0398 - val_accuracy: 0.9891
Epoch 82/100
595/595 [==============================] - 4s 6ms/step - loss: 0.0098 - accuracy: 0.9965 - val_loss: 0.0405 - val_accuracy: 0.9865
Epoch 83/100
595/595 [==============================] - 4s 6ms/step - loss: 0.0089 - accuracy: 0.9973 - val_loss: 0.0348 - val_accuracy: 0.9895
Epoch 84/100
595/595 [==============================] - 4s 6ms/step - loss: 1.6936e-04 - accuracy: 1.0000 - val_loss: 0.0332 - val_accuracy: 0.9918
Epoch 85/100
595/595 [==============================] - 3s 6ms/step - loss: 6.1327e-05 - accuracy: 1.0000 - val_loss: 0.0341 - val_accuracy: 0.9926
Epoch 86/100
595/595 [==============================] - 3s 6ms/step - loss: 3.5371e-05 - accuracy: 1.0000 - val_loss: 0.0353 - val_accuracy: 0.9931
Epoch 87/100
595/595 [==============================] - 4s 6ms/step - loss: 2.1930e-05 - accuracy: 1.0000 - val_loss: 0.0366 - val_accuracy: 0.9931
Epoch 88/100
595/595 [==============================] - 3s 6ms/step - loss: 1.3819e-05 - accuracy: 1.0000 - val_loss: 0.0379 - val_accuracy: 0.9933
Epoch 89/100
595/595 [==============================] - 3s 6ms/step - loss: 8.8870e-06 - accuracy: 1.0000 - val_loss: 0.0394 - val_accuracy: 0.9926
Epoch 90/100
595/595 [==============================] - 4s 6ms/step - loss: 5.8896e-06 - accuracy: 1.0000 - val_loss: 0.0410 - val_accuracy: 0.9926
Epoch 91/100
595/595 [==============================] - 4s 6ms/step - loss: 4.0627e-06 - accuracy: 1.0000 - val_loss: 0.0420 - val_accuracy: 0.9922
Epoch 92/100
595/595 [==============================] - 3s 6ms/step - loss: 2.8027e-06 - accuracy: 1.0000 - val_loss: 0.0436 - val_accuracy: 0.9922
Epoch 93/100
595/595 [==============================] - 4s 6ms/step - loss: 2.0242e-06 - accuracy: 1.0000 - val_loss: 0.0448 - val_accuracy: 0.9918
Epoch 94/100
595/595 [==============================] - 3s 6ms/step - loss: 1.4414e-06 - accuracy: 1.0000 - val_loss: 0.0468 - val_accuracy: 0.9924
Epoch 95/100
595/595 [==============================] - 3s 6ms/step - loss: 1.0424e-06 - accuracy: 1.0000 - val_loss: 0.0486 - val_accuracy: 0.9924
Epoch 96/100
595/595 [==============================] - 3s 6ms/step - loss: 7.5966e-07 - accuracy: 1.0000 - val_loss: 0.0497 - val_accuracy: 0.9924
Epoch 97/100
595/595 [==============================] - 3s 6ms/step - loss: 5.5500e-07 - accuracy: 1.0000 - val_loss: 0.0519 - val_accuracy: 0.9926
Epoch 98/100
595/595 [==============================] - 3s 6ms/step - loss: 4.0762e-07 - accuracy: 1.0000 - val_loss: 0.0537 - val_accuracy: 0.9929
Epoch 99/100
595/595 [==============================] - 3s 6ms/step - loss: 3.0388e-07 - accuracy: 1.0000 - val_loss: 0.0553 - val_accuracy: 0.9926
Epoch 100/100
595/595 [==============================] - 4s 6ms/step - loss: 2.2035e-07 - accuracy: 1.0000 - val_loss: 0.0572 - val_accuracy: 0.9929
In [ ]:
y_pred= model.predict(X_test)
plot_metrics(history, y_test, y_pred)
186/186 [==============================] - 1s 2ms/step
Accuracy:  0.993778375651589
Precision:  0.9923384410393071
Recall:  0.9953224189776144
F1 score:  0.9938281901584654
In [ ]:
y_preds=[]
for i in y_pred:
    if i>0.5:
        y_preds.append(1)
    else:
        y_preds.append(0)
In [ ]:
print(classification_report(y_test, y_preds))
              precision    recall  f1-score   support

           0       1.00      0.99      0.99      2954
           1       0.99      1.00      0.99      2993

    accuracy                           0.99      5947
   macro avg       0.99      0.99      0.99      5947
weighted avg       0.99      0.99      0.99      5947

In [ ]:
cm=confusion_matrix(y_test,y_preds)
print(cm)
[[2931   23]
 [  14 2979]]

FaceForensics++¶

In [ ]:
df=pd.read_csv("../Data/ffELAEfficientFormer.csv")
df.head()
Out[ ]:
Unnamed: 0 0 1 2 3 4 5 6 7 8 ... 759 760 761 762 763 764 765 766 767 label
0 0 -0.311707 0.459420 -0.105934 -0.027099 0.813496 -0.097004 -0.015042 0.085467 -0.195130 ... 0.269270 0.743087 -0.430609 -0.026296 0.934145 2.190989 1.259573 1.721283 0.869057 0
1 1 0.094533 0.371845 -0.191351 0.003292 0.679079 0.569582 -0.031493 0.560364 -0.260038 ... 0.215541 0.710751 -0.121630 -0.148940 0.807394 2.157245 1.398521 2.338162 0.729945 0
2 2 0.074376 0.234607 0.049538 0.231451 0.566247 0.742549 0.049717 0.477335 -0.120970 ... 0.178271 0.541171 -0.210184 -0.109294 0.872813 2.513999 1.577552 2.106215 0.815446 0
3 3 -0.039756 -1.313070 0.567037 0.595682 0.440420 -0.268075 -0.027808 0.031323 0.183098 ... -0.147140 0.731044 -0.482814 -0.101063 1.062971 2.972917 0.251622 0.850666 0.179601 0
4 4 -0.274827 -0.995332 0.175439 0.280141 0.477032 0.842147 -0.175154 0.226923 0.442570 ... 0.065944 0.442195 -0.328092 0.122477 0.699524 3.154155 0.988861 0.490659 0.458583 0

5 rows × 770 columns

In [ ]:
df=df.drop(columns=["Unnamed: 0"],axis=1)
In [ ]:
df.head()
Out[ ]:
0 1 2 3 4 5 6 7 8 9 ... 759 760 761 762 763 764 765 766 767 label
0 -0.311707 0.459420 -0.105934 -0.027099 0.813496 -0.097004 -0.015042 0.085467 -0.195130 -0.167751 ... 0.269270 0.743087 -0.430609 -0.026296 0.934145 2.190989 1.259573 1.721283 0.869057 0
1 0.094533 0.371845 -0.191351 0.003292 0.679079 0.569582 -0.031493 0.560364 -0.260038 0.341639 ... 0.215541 0.710751 -0.121630 -0.148940 0.807394 2.157245 1.398521 2.338162 0.729945 0
2 0.074376 0.234607 0.049538 0.231451 0.566247 0.742549 0.049717 0.477335 -0.120970 0.217552 ... 0.178271 0.541171 -0.210184 -0.109294 0.872813 2.513999 1.577552 2.106215 0.815446 0
3 -0.039756 -1.313070 0.567037 0.595682 0.440420 -0.268075 -0.027808 0.031323 0.183098 -0.392857 ... -0.147140 0.731044 -0.482814 -0.101063 1.062971 2.972917 0.251622 0.850666 0.179601 0
4 -0.274827 -0.995332 0.175439 0.280141 0.477032 0.842147 -0.175154 0.226923 0.442570 -0.566010 ... 0.065944 0.442195 -0.328092 0.122477 0.699524 3.154155 0.988861 0.490659 0.458583 0

5 rows × 769 columns

In [ ]:
df.describe()
Out[ ]:
0 1 2 3 4 5 6 7 8 9 ... 759 760 761 762 763 764 765 766 767 label
count 33823.000000 33823.000000 33823.000000 33823.000000 33823.000000 33823.000000 33823.000000 33823.000000 33823.000000 33823.000000 ... 33823.000000 33823.000000 33823.000000 33823.000000 33823.000000 33823.000000 33823.000000 33823.000000 33823.000000 33823.000000
mean 0.052882 -0.328215 0.072574 0.277862 0.586622 -0.233018 0.089849 0.357267 0.088051 -0.473411 ... 0.264295 0.535334 -0.390294 0.081880 0.524200 2.280714 0.655268 0.905279 0.246741 0.544215
std 0.236789 0.413154 0.256941 0.215841 0.196836 0.497329 0.323393 0.212874 0.301981 0.240738 ... 0.220006 0.373507 0.196632 0.225336 0.400860 0.594359 0.358512 0.492840 0.248471 0.498049
min -0.822473 -1.936193 -0.846923 -0.416035 -0.412400 -2.178250 -1.302664 -0.620951 -1.000455 -1.461917 ... -0.812514 -1.018852 -1.226959 -0.946252 -0.811310 -0.803695 -0.434941 -1.027854 -0.600545 0.000000
25% -0.110851 -0.609363 -0.103580 0.124798 0.459372 -0.568462 -0.121771 0.222016 -0.126263 -0.642405 ... 0.118272 0.270903 -0.522028 -0.069519 0.237629 1.894188 0.391100 0.566073 0.074965 0.000000
50% 0.050866 -0.311484 0.057009 0.268865 0.595286 -0.203402 0.116580 0.365924 0.075175 -0.487181 ... 0.268378 0.498306 -0.393336 0.083612 0.559014 2.291855 0.638450 0.872589 0.243038 1.000000
75% 0.213509 -0.047798 0.233698 0.420930 0.724527 0.119384 0.323829 0.499547 0.291002 -0.315119 ... 0.415809 0.776991 -0.263076 0.233676 0.822059 2.681502 0.899615 1.211827 0.414427 1.000000
max 1.082605 1.295731 1.423512 1.242820 1.366030 1.563411 1.077811 1.194327 1.477179 0.586411 ... 1.143253 1.913406 0.449869 0.977305 1.857061 4.793428 1.837455 3.106472 1.191478 1.000000

8 rows × 769 columns

In [ ]:
X = df.drop('label', axis=1).values
y = df['label'].values
In [ ]:
X = X[:5*(len(X)//5)]
y=y[:5*(len(y)//5)]
In [ ]:
# Assuming you have X and y (features and labels) already defined
X_windows, y_windows = create_windows(X, y, window_size)
X_windows=np.array(X_windows)
y_windows=np.array(y_windows)
In [ ]:
X_train, X_test, y_train, y_test = train_test_split(X_windows, y_windows, test_size=0.2, random_state=42)
In [ ]:
model = Sequential()

# Add a GRU layer
model.add(GRU(units=64, input_shape=(window_size, X_train.shape[2]),return_sequences=True)) 
model.add(GRU(units=64, return_sequences=False))  


model.add(Dense(units=1, activation='sigmoid'))
In [ ]:
model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])
In [ ]:
history = model.fit(X_train, y_train, epochs=100, batch_size=32, validation_split=0.2)
Epoch 1/100
677/677 [==============================] - 7s 8ms/step - loss: 0.4214 - accuracy: 0.7988 - val_loss: 0.2305 - val_accuracy: 0.9063
Epoch 2/100
677/677 [==============================] - 4s 6ms/step - loss: 0.1843 - accuracy: 0.9288 - val_loss: 0.2463 - val_accuracy: 0.8939
Epoch 3/100
677/677 [==============================] - 4s 6ms/step - loss: 0.1122 - accuracy: 0.9576 - val_loss: 0.2504 - val_accuracy: 0.9133
Epoch 4/100
677/677 [==============================] - 4s 6ms/step - loss: 0.0799 - accuracy: 0.9695 - val_loss: 0.1168 - val_accuracy: 0.9527
Epoch 5/100
677/677 [==============================] - 4s 6ms/step - loss: 0.0655 - accuracy: 0.9750 - val_loss: 0.0786 - val_accuracy: 0.9686
Epoch 6/100
677/677 [==============================] - 4s 6ms/step - loss: 0.0546 - accuracy: 0.9808 - val_loss: 0.1072 - val_accuracy: 0.9601
Epoch 7/100
677/677 [==============================] - 4s 6ms/step - loss: 0.0448 - accuracy: 0.9829 - val_loss: 0.0501 - val_accuracy: 0.9824
Epoch 8/100
677/677 [==============================] - 4s 6ms/step - loss: 0.0343 - accuracy: 0.9865 - val_loss: 0.0498 - val_accuracy: 0.9834
Epoch 9/100
677/677 [==============================] - 4s 6ms/step - loss: 0.0311 - accuracy: 0.9887 - val_loss: 0.0375 - val_accuracy: 0.9850
Epoch 10/100
677/677 [==============================] - 4s 6ms/step - loss: 0.0278 - accuracy: 0.9905 - val_loss: 0.0284 - val_accuracy: 0.9897
Epoch 11/100
677/677 [==============================] - 4s 6ms/step - loss: 0.0285 - accuracy: 0.9895 - val_loss: 0.0636 - val_accuracy: 0.9791
Epoch 12/100
677/677 [==============================] - 4s 6ms/step - loss: 0.0245 - accuracy: 0.9915 - val_loss: 0.0492 - val_accuracy: 0.9832
Epoch 13/100
677/677 [==============================] - 4s 6ms/step - loss: 0.0209 - accuracy: 0.9918 - val_loss: 0.0498 - val_accuracy: 0.9806
Epoch 14/100
677/677 [==============================] - 4s 6ms/step - loss: 0.0209 - accuracy: 0.9922 - val_loss: 0.0264 - val_accuracy: 0.9906
Epoch 15/100
677/677 [==============================] - 4s 6ms/step - loss: 0.0189 - accuracy: 0.9937 - val_loss: 0.0266 - val_accuracy: 0.9900
Epoch 16/100
677/677 [==============================] - 4s 6ms/step - loss: 0.0145 - accuracy: 0.9952 - val_loss: 0.0501 - val_accuracy: 0.9826
Epoch 17/100
677/677 [==============================] - 4s 6ms/step - loss: 0.0171 - accuracy: 0.9939 - val_loss: 0.0255 - val_accuracy: 0.9895
Epoch 18/100
677/677 [==============================] - 4s 6ms/step - loss: 0.0155 - accuracy: 0.9949 - val_loss: 0.0381 - val_accuracy: 0.9861
Epoch 19/100
677/677 [==============================] - 4s 6ms/step - loss: 0.0150 - accuracy: 0.9950 - val_loss: 0.0357 - val_accuracy: 0.9869
Epoch 20/100
677/677 [==============================] - 4s 7ms/step - loss: 0.0155 - accuracy: 0.9948 - val_loss: 0.0362 - val_accuracy: 0.9871
Epoch 21/100
677/677 [==============================] - 4s 6ms/step - loss: 0.0106 - accuracy: 0.9963 - val_loss: 0.0374 - val_accuracy: 0.9867
Epoch 22/100
677/677 [==============================] - 4s 6ms/step - loss: 0.0121 - accuracy: 0.9955 - val_loss: 0.0563 - val_accuracy: 0.9837
Epoch 23/100
677/677 [==============================] - 4s 6ms/step - loss: 0.0137 - accuracy: 0.9956 - val_loss: 0.0266 - val_accuracy: 0.9909
Epoch 24/100
677/677 [==============================] - 4s 6ms/step - loss: 0.0149 - accuracy: 0.9950 - val_loss: 0.0216 - val_accuracy: 0.9913
Epoch 25/100
677/677 [==============================] - 4s 6ms/step - loss: 0.0118 - accuracy: 0.9960 - val_loss: 0.0456 - val_accuracy: 0.9837
Epoch 26/100
677/677 [==============================] - 4s 6ms/step - loss: 0.0091 - accuracy: 0.9970 - val_loss: 0.0292 - val_accuracy: 0.9917
Epoch 27/100
677/677 [==============================] - 4s 6ms/step - loss: 0.0140 - accuracy: 0.9951 - val_loss: 0.0379 - val_accuracy: 0.9872
Epoch 28/100
677/677 [==============================] - 4s 6ms/step - loss: 0.0049 - accuracy: 0.9988 - val_loss: 0.0512 - val_accuracy: 0.9817
Epoch 29/100
677/677 [==============================] - 4s 6ms/step - loss: 0.0179 - accuracy: 0.9938 - val_loss: 0.0234 - val_accuracy: 0.9917
Epoch 30/100
677/677 [==============================] - 4s 6ms/step - loss: 0.0045 - accuracy: 0.9985 - val_loss: 0.0363 - val_accuracy: 0.9897
Epoch 31/100
677/677 [==============================] - 4s 6ms/step - loss: 0.0140 - accuracy: 0.9952 - val_loss: 0.0222 - val_accuracy: 0.9928
Epoch 32/100
677/677 [==============================] - 4s 6ms/step - loss: 0.0022 - accuracy: 0.9994 - val_loss: 0.0288 - val_accuracy: 0.9898
Epoch 33/100
677/677 [==============================] - 4s 6ms/step - loss: 0.0103 - accuracy: 0.9969 - val_loss: 0.0299 - val_accuracy: 0.9924
Epoch 34/100
677/677 [==============================] - 4s 6ms/step - loss: 0.0113 - accuracy: 0.9963 - val_loss: 0.0409 - val_accuracy: 0.9869
Epoch 35/100
677/677 [==============================] - 4s 6ms/step - loss: 0.0090 - accuracy: 0.9973 - val_loss: 0.0183 - val_accuracy: 0.9935
Epoch 36/100
677/677 [==============================] - 4s 6ms/step - loss: 0.0041 - accuracy: 0.9989 - val_loss: 0.0468 - val_accuracy: 0.9860
Epoch 37/100
677/677 [==============================] - 4s 6ms/step - loss: 0.0134 - accuracy: 0.9958 - val_loss: 0.0200 - val_accuracy: 0.9933
Epoch 38/100
677/677 [==============================] - 4s 6ms/step - loss: 0.0073 - accuracy: 0.9976 - val_loss: 0.0266 - val_accuracy: 0.9906
Epoch 39/100
677/677 [==============================] - 4s 6ms/step - loss: 0.0103 - accuracy: 0.9968 - val_loss: 0.0375 - val_accuracy: 0.9889
Epoch 40/100
677/677 [==============================] - 4s 6ms/step - loss: 0.0087 - accuracy: 0.9971 - val_loss: 0.0384 - val_accuracy: 0.9897
Epoch 41/100
677/677 [==============================] - 4s 6ms/step - loss: 7.7035e-04 - accuracy: 0.9999 - val_loss: 0.0162 - val_accuracy: 0.9948
Epoch 42/100
677/677 [==============================] - 4s 6ms/step - loss: 0.0077 - accuracy: 0.9976 - val_loss: 0.1179 - val_accuracy: 0.9597
Epoch 43/100
677/677 [==============================] - 4s 6ms/step - loss: 0.0124 - accuracy: 0.9954 - val_loss: 0.0271 - val_accuracy: 0.9909
Epoch 44/100
677/677 [==============================] - 4s 6ms/step - loss: 0.0025 - accuracy: 0.9993 - val_loss: 0.0407 - val_accuracy: 0.9895
Epoch 45/100
677/677 [==============================] - 4s 6ms/step - loss: 0.0129 - accuracy: 0.9953 - val_loss: 0.0199 - val_accuracy: 0.9943
Epoch 46/100
677/677 [==============================] - 4s 6ms/step - loss: 0.0011 - accuracy: 0.9998 - val_loss: 0.0177 - val_accuracy: 0.9954
Epoch 47/100
677/677 [==============================] - 4s 6ms/step - loss: 2.2109e-04 - accuracy: 1.0000 - val_loss: 0.0140 - val_accuracy: 0.9961
Epoch 48/100
677/677 [==============================] - 4s 6ms/step - loss: 3.6975e-05 - accuracy: 1.0000 - val_loss: 0.0140 - val_accuracy: 0.9959
Epoch 49/100
677/677 [==============================] - 4s 7ms/step - loss: 2.0057e-05 - accuracy: 1.0000 - val_loss: 0.0142 - val_accuracy: 0.9959
Epoch 50/100
677/677 [==============================] - 4s 6ms/step - loss: 1.1714e-05 - accuracy: 1.0000 - val_loss: 0.0142 - val_accuracy: 0.9957
Epoch 51/100
677/677 [==============================] - 4s 6ms/step - loss: 8.9158e-06 - accuracy: 1.0000 - val_loss: 0.0147 - val_accuracy: 0.9956
Epoch 52/100
677/677 [==============================] - 4s 6ms/step - loss: 4.8164e-06 - accuracy: 1.0000 - val_loss: 0.0147 - val_accuracy: 0.9959
Epoch 53/100
677/677 [==============================] - 4s 6ms/step - loss: 3.3552e-06 - accuracy: 1.0000 - val_loss: 0.0149 - val_accuracy: 0.9957
Epoch 54/100
677/677 [==============================] - 4s 6ms/step - loss: 2.3322e-06 - accuracy: 1.0000 - val_loss: 0.0153 - val_accuracy: 0.9961
Epoch 55/100
677/677 [==============================] - 4s 6ms/step - loss: 1.6533e-06 - accuracy: 1.0000 - val_loss: 0.0157 - val_accuracy: 0.9961
Epoch 56/100
677/677 [==============================] - 4s 6ms/step - loss: 1.1924e-06 - accuracy: 1.0000 - val_loss: 0.0159 - val_accuracy: 0.9961
Epoch 57/100
677/677 [==============================] - 4s 6ms/step - loss: 8.5447e-07 - accuracy: 1.0000 - val_loss: 0.0162 - val_accuracy: 0.9959
Epoch 58/100
677/677 [==============================] - 4s 6ms/step - loss: 6.0680e-07 - accuracy: 1.0000 - val_loss: 0.0164 - val_accuracy: 0.9963
Epoch 59/100
677/677 [==============================] - 4s 6ms/step - loss: 4.3435e-07 - accuracy: 1.0000 - val_loss: 0.0168 - val_accuracy: 0.9959
Epoch 60/100
677/677 [==============================] - 4s 6ms/step - loss: 3.1250e-07 - accuracy: 1.0000 - val_loss: 0.0172 - val_accuracy: 0.9963
Epoch 61/100
677/677 [==============================] - 4s 6ms/step - loss: 2.2490e-07 - accuracy: 1.0000 - val_loss: 0.0177 - val_accuracy: 0.9965
Epoch 62/100
677/677 [==============================] - 4s 6ms/step - loss: 1.6274e-07 - accuracy: 1.0000 - val_loss: 0.0179 - val_accuracy: 0.9963
Epoch 63/100
677/677 [==============================] - 4s 6ms/step - loss: 1.1846e-07 - accuracy: 1.0000 - val_loss: 0.0184 - val_accuracy: 0.9959
Epoch 64/100
677/677 [==============================] - 4s 6ms/step - loss: 8.6603e-08 - accuracy: 1.0000 - val_loss: 0.0187 - val_accuracy: 0.9961
Epoch 65/100
677/677 [==============================] - 4s 6ms/step - loss: 6.2192e-08 - accuracy: 1.0000 - val_loss: 0.0193 - val_accuracy: 0.9963
Epoch 66/100
677/677 [==============================] - 4s 6ms/step - loss: 4.5779e-08 - accuracy: 1.0000 - val_loss: 0.0195 - val_accuracy: 0.9959
Epoch 67/100
677/677 [==============================] - 4s 6ms/step - loss: 3.3659e-08 - accuracy: 1.0000 - val_loss: 0.0197 - val_accuracy: 0.9963
Epoch 68/100
677/677 [==============================] - 4s 6ms/step - loss: 2.4984e-08 - accuracy: 1.0000 - val_loss: 0.0198 - val_accuracy: 0.9963
Epoch 69/100
677/677 [==============================] - 4s 6ms/step - loss: 1.8364e-08 - accuracy: 1.0000 - val_loss: 0.0203 - val_accuracy: 0.9963
Epoch 70/100
677/677 [==============================] - 4s 6ms/step - loss: 1.3623e-08 - accuracy: 1.0000 - val_loss: 0.0205 - val_accuracy: 0.9963
Epoch 71/100
677/677 [==============================] - 4s 6ms/step - loss: 1.0270e-08 - accuracy: 1.0000 - val_loss: 0.0209 - val_accuracy: 0.9963
Epoch 72/100
677/677 [==============================] - 4s 5ms/step - loss: 7.7838e-09 - accuracy: 1.0000 - val_loss: 0.0212 - val_accuracy: 0.9963
Epoch 73/100
677/677 [==============================] - 4s 6ms/step - loss: 5.9432e-09 - accuracy: 1.0000 - val_loss: 0.0214 - val_accuracy: 0.9961
Epoch 74/100
677/677 [==============================] - 4s 6ms/step - loss: 4.6105e-09 - accuracy: 1.0000 - val_loss: 0.0216 - val_accuracy: 0.9963
Epoch 75/100
677/677 [==============================] - 4s 6ms/step - loss: 3.6277e-09 - accuracy: 1.0000 - val_loss: 0.0219 - val_accuracy: 0.9963
Epoch 76/100
677/677 [==============================] - 4s 6ms/step - loss: 2.8977e-09 - accuracy: 1.0000 - val_loss: 0.0221 - val_accuracy: 0.9963
Epoch 77/100
677/677 [==============================] - 4s 6ms/step - loss: 2.3392e-09 - accuracy: 1.0000 - val_loss: 0.0222 - val_accuracy: 0.9961
Epoch 78/100
677/677 [==============================] - 4s 6ms/step - loss: 1.9451e-09 - accuracy: 1.0000 - val_loss: 0.0223 - val_accuracy: 0.9961
Epoch 79/100
677/677 [==============================] - 4s 6ms/step - loss: 1.6261e-09 - accuracy: 1.0000 - val_loss: 0.0225 - val_accuracy: 0.9963
Epoch 80/100
677/677 [==============================] - 4s 6ms/step - loss: 1.3913e-09 - accuracy: 1.0000 - val_loss: 0.0226 - val_accuracy: 0.9961
Epoch 81/100
677/677 [==============================] - 4s 6ms/step - loss: 1.2150e-09 - accuracy: 1.0000 - val_loss: 0.0227 - val_accuracy: 0.9963
Epoch 82/100
677/677 [==============================] - 4s 6ms/step - loss: 1.0719e-09 - accuracy: 1.0000 - val_loss: 0.0228 - val_accuracy: 0.9961
Epoch 83/100
677/677 [==============================] - 4s 6ms/step - loss: 9.6171e-10 - accuracy: 1.0000 - val_loss: 0.0228 - val_accuracy: 0.9961
Epoch 84/100
677/677 [==============================] - 4s 6ms/step - loss: 8.7210e-10 - accuracy: 1.0000 - val_loss: 0.0230 - val_accuracy: 0.9963
Epoch 85/100
677/677 [==============================] - 4s 6ms/step - loss: 8.0616e-10 - accuracy: 1.0000 - val_loss: 0.0230 - val_accuracy: 0.9961
Epoch 86/100
677/677 [==============================] - 4s 6ms/step - loss: 7.4568e-10 - accuracy: 1.0000 - val_loss: 0.0231 - val_accuracy: 0.9961
Epoch 87/100
677/677 [==============================] - 4s 6ms/step - loss: 6.9626e-10 - accuracy: 1.0000 - val_loss: 0.0232 - val_accuracy: 0.9961
Epoch 88/100
677/677 [==============================] - 4s 6ms/step - loss: 6.6384e-10 - accuracy: 1.0000 - val_loss: 0.0233 - val_accuracy: 0.9961
Epoch 89/100
677/677 [==============================] - 4s 6ms/step - loss: 6.2699e-10 - accuracy: 1.0000 - val_loss: 0.0232 - val_accuracy: 0.9959
Epoch 90/100
677/677 [==============================] - 4s 6ms/step - loss: 5.9606e-10 - accuracy: 1.0000 - val_loss: 0.0233 - val_accuracy: 0.9961
Epoch 91/100
677/677 [==============================] - 4s 6ms/step - loss: 5.7268e-10 - accuracy: 1.0000 - val_loss: 0.0232 - val_accuracy: 0.9959
Epoch 92/100
677/677 [==============================] - 4s 6ms/step - loss: 5.4823e-10 - accuracy: 1.0000 - val_loss: 0.0233 - val_accuracy: 0.9959
Epoch 93/100
677/677 [==============================] - 4s 6ms/step - loss: 5.2856e-10 - accuracy: 1.0000 - val_loss: 0.0234 - val_accuracy: 0.9959
Epoch 94/100
677/677 [==============================] - 4s 6ms/step - loss: 5.0852e-10 - accuracy: 1.0000 - val_loss: 0.0234 - val_accuracy: 0.9959
Epoch 95/100
677/677 [==============================] - 4s 6ms/step - loss: 4.9087e-10 - accuracy: 1.0000 - val_loss: 0.0235 - val_accuracy: 0.9959
Epoch 96/100
677/677 [==============================] - 4s 6ms/step - loss: 4.7331e-10 - accuracy: 1.0000 - val_loss: 0.0235 - val_accuracy: 0.9957
Epoch 97/100
677/677 [==============================] - 4s 6ms/step - loss: 4.6645e-10 - accuracy: 1.0000 - val_loss: 0.0235 - val_accuracy: 0.9957
Epoch 98/100
677/677 [==============================] - 4s 6ms/step - loss: 4.5520e-10 - accuracy: 1.0000 - val_loss: 0.0235 - val_accuracy: 0.9957
Epoch 99/100
677/677 [==============================] - 4s 6ms/step - loss: 4.4824e-10 - accuracy: 1.0000 - val_loss: 0.0236 - val_accuracy: 0.9957
Epoch 100/100
677/677 [==============================] - 4s 6ms/step - loss: 4.3337e-10 - accuracy: 1.0000 - val_loss: 0.0236 - val_accuracy: 0.9957
In [ ]:
y_pred= model.predict(X_test)
plot_metrics(history, y_test, y_pred)
212/212 [==============================] - 1s 2ms/step
Accuracy:  0.9946777054997044
Precision:  0.9945130315500685
Recall:  0.9956056028563581
F1 score:  0.9950590172934394
In [ ]:
y_preds=[]
for i in y_pred:
    if i>0.5:
        y_preds.append(1)
    else:
        y_preds.append(0)
In [ ]:
print(classification_report(y_test, y_preds))
              precision    recall  f1-score   support

           0       0.99      0.99      0.99      3123
           1       0.99      1.00      1.00      3641

    accuracy                           0.99      6764
   macro avg       0.99      0.99      0.99      6764
weighted avg       0.99      0.99      0.99      6764

In [ ]:
cm=confusion_matrix(y_test,y_preds)
print(cm)
[[3103   20]
 [  16 3625]]